12 Stimmen

|| Operator, Rückgabe, wenn das Ergebnis bekannt ist?

Ich habe eine Funktion ähnlich der folgenden:

def check
  return 2 == 2 || 3 != 2 || 4 != 5
end

Meine Frage ist, wird Ruby alle Vergleiche durchführen, obwohl der erste wahr ist, und somit die Funktion true zurückgeben. Meine Prüfungen sind viel intensiver, so würde ich gerne wissen, ob ich dies in einer anderen Art und Weise brechen sollte, um zu vermeiden, alle Prüfungen jedes Mal.

irb(main):004:0> 2 == 2 || 3 != 2 || 4 != 5
=> true

Ich danke Ihnen.

17voto

Mark Byers Punkte 761508

Ruby verwendet Kurzschlussauswertung .

Dies gilt sowohl für || als auch für &&.

  • Mit || der rechte Operand wird nicht ausgewertet, wenn der linke Operand wahrheitsgemäß ist.
  • Mit && der rechte Operand wird nicht ausgewertet, wenn der linke Operand fehlerhaft ist.

6voto

sepp2k Punkte 352762

|| einen Kurzschluss verursacht, sobald die erste Bedingung erfüllt ist. Es ist also hilfreich, wenn Sie die teuersten Bedingungen an das Ende stellen.

2voto

Brandon Moretz Punkte 7322

|| schließt die Auswertung standardmäßig ab, d.h. sobald der erste "wahre" Ausdruck auftritt, wird die Auswertung gestoppt (es sei denn, Sie geben ausdrücklich an, dass alle Ausdrücke mit dem Operator "oder" ausgewertet werden sollen).

Hinweis:

http://en.wikipedia.org/wiki/Short-circuit_evaluation

0voto

krtek Punkte 25830

Sobald eine der Bedingungen erfüllt ist, kehrt die Funktion zurück.

0voto

Aetherus Punkte 8234

Sie können es selbst in irb testen, etwa so:

irb> p('Hello') || p('World')

Wie wir wissen, ist die Funktion p druckt seine Parameter (in einer inspect Weise) und gibt sie dann zurück, wenn also die || Kurzschlüsse, nur "Hello" gedruckt wird, ansonsten werden beide "Hello" y "World" gedruckt werden.

Sie können auch die logische && Operator, indem er puts anstelle von p als puts gibt immer zurück nil .

Übrigens ist irb ein perfekter Ort, um mit Ruby zu spielen. Sie können dort alles testen, außer einem kleinen Teil der Gleichzeitigkeit.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X