Dies ist jedoch deutlich langsamer als der Code, den Sie vermeiden möchten - zumindest solange a
, b
und c
grundlegende Daten sind. Meine Messungen zeigten einen Faktor von 3. Dies ist wahrscheinlich auf die zusätzliche Array
-Obbildung zurückzuführen. Also müssen Sie hier TROCKEN gegen Leistung abwägen. Normalerweise sollte das aber egal sein, denn beide Varianten brauchen nicht lange.
Obwohl keine genaue Entsprechung von a == b || a == c
, bietet case
Anweisung eine Syntax dafür:
Fühlen Sie sich frei, das nächste Ruby-Lehrbuch zu öffnen und lesen Sie, wie case
-Anweisung funktioniert. Spoiler: Es funktioniert, indem Sie die Methode #===
für die verglichenen Objekte aufrufen:
Führe jetzt
aus %Vor%Das gibt Ihnen viel Flexibilität. Es erfordert Arbeit im Back-Office, aber nachdem Sie es tun, sieht aus wie Magie im Front-Office.
Sie sollten wirklich wissen, warum das nicht funktioniert:
%Vor%Das scheint eine Übersetzung des Satzes "a oder c ist gleich b" zu sein, was auf Englisch Sinn macht.
In fast allen Programmiersprachen ist (a || c)
ein Ausdruck, dessen Bewertungsergebnis mit b
verglichen wird. Die Übersetzung ins Englische ist "Das Ergebnis der Operation" a oder c "ist gleich b" .
@ undur_gongors Antwort ist vollkommen richtig. Nur um hinzuzufügen, wenn Sie mit Arrays arbeiten, zum Beispiel:
%Vor%Sie müssten etwas tun wie:
%Vor% Acolyte hat darauf hingewiesen, dass du b == (a||c)
verwenden kannst, du hast es einfach rückwärts laufen lassen, aber das funktioniert nur für den linken Wert, da (a || c) immer ein ist, vorausgesetzt a ist nicht falsch.
Eine andere Möglichkeit ist die Verwendung eines ternären Operators.
%Vor%Ich bin mir nicht sicher über den Geschwindigkeitsunterschied, der für den Array-Ansatz angeführt wird, aber ich denke, dass dies schneller sein könnte, da es entweder einen oder zwei Vergleiche durchführt und nicht mit Arrays arbeiten muss. Außerdem nehme ich an, es ist genau dasselbe wie (a == b || b == c), aber es ist eine stilistische Alternative.
Was ist damit? wenn [a, c] .index (b)! = nil; setzt "b = a oder b = c"; Ende
Tags und Links ruby