Wenn die Variable "nil" ist, können einige Methoden einen Fehler verursachen.
Wenn beispielsweise "each" verwendet wird, um ein Array von Werten in einem Prozess zu drehen, wird der Prozess gestoppt und ein Fehler tritt auf, wenn "nil" enthalten ist. .. Es wäre ein Problem, wenn etwas passieren würde.
In einem solchen Fall können Sie "Null" vermeiden, indem Sie "Weiter" ausführen, wenn [Variable] .nil? "Mit ** Schutzklausel ** (eine Methode zum Implementieren, um die Ausnahme zu Beginn der Funktion oder des iterativen Prozesses zu entfernen). Das tue ich, aber ich möchte eine Notiz machen, wenn es eine andere Methode gibt, die logische Operatoren anwendet.
Schreiben Sie zunächst aus der Schlussfolgerung heraus in Form von "[Objekt] &. [Methode]".
Zum Beispiel
# Ohne &
ary = [[1,2,3],nil,[5,6]]
ary.each do |element_ary|
p element_ary.length
end
=>
3
Traceback (most recent call last):
2: from test.rb:3:in `<main>'
1: from test.rb:3:in `each'
test.rb:4:in `block in <main>': undefined method `length' for #nil:NilClass (NoMethodError)
# Mit &
ary = [[1,2,3],nil,[5,6]]
ary.each do |element_ary|
puts element_ary&.length
end
=>
3
nil
2
Auf diese Weise entstehen keine Fehler.
Tatsächlich handelt es sich dabei um den logischen Operator "&&".
Im Allgemeinen weisen logische Operatoren die folgenden Merkmale auf:
・ In der Reihenfolge von links ausgewertet ・ Sobald die Wahrheit des logischen Ausdrucks bestimmt ist, werden die verbleibenden Ausdrücke nicht ausgewertet. -Der Wert des zuletzt ausgewerteten Ausdrucks wird zum Wert der gesamten Logik
Das heißt, wenn "[Bedingung 1] && [Bedingung 2]" gefunden wird, wird "[Bedingung 2]" nur ausgewertet, wenn "[Bedingung 1]" wahr ist. Dies liegt daran, dass, wenn "[Bedingung 1]" "null" oder "falsch" ist, das Ergebnis des logischen Operators "&&" "null" oder "falsch" ist, ohne Bedingung 2 zu bewerten.
Wenn Sie dies anwenden und anhand des obigen Beispiels erklären, kann dies wie folgt geschrieben werden.
ary = [[1,2,3],nil,[5,6]]
ary.each do |element_ary|
p element_ary && element_ary.length
end
Wenn "nil" in "element_ary" eingegeben wird, endet die Verarbeitung des logischen Operators zum Zeitpunkt von "[Bedingung 1]" und "nil" wird zurückgegeben, so dass "nil" zur "Längen" -Methode von "[Bedingung 2]" hinzugefügt wird. Wird nicht überqueren.
Es wurde als Sicherheitsreferenzoperator bezeichnet, der ausgedrückt werden konnte, indem dies weggelassen und nach dem Objekt "&" hinzugefügt wurde, wie unten gezeigt.
ary = [[1,2,3],nil,[5,6]]
ary.each do |element_ary|
p element_ary&.length
end
Es war ein Anwendungsbeispiel für einen logischen Operator, aber ich fand es schön.
Recommended Posts