Für andere Arten von Variablen verwende ich ||=
, aber dies funktioniert nicht für boolesche Werte ( x ||= true
weist x True zu, auch wenn x vorher falsch zugewiesen wurde).
Ich dachte, das würde funktionieren:
%Vor%Aber das tut es nicht: es weist x aus irgendeinem Grund nil zu. (Eine Erklärung hier wäre willkommen.)
Ich kenne eine Methode, die funktioniert:
%Vor%Aber es ist ziemlich ausführlich. Gibt es eine prägnantere Möglichkeit, booleschen Variablen in Ruby Standardwerte zuzuordnen?
Sie müssen defined?
zuerst haben, andernfalls erreicht der Parser x =
und definiert dann x
(was nil
ergibt), bevor unless
:
Das Ausführen eines if
/ unless
-Blocks (anstelle von nach- if
/ unless
einlinig) funktioniert ebenfalls:
In Ruby gibt es nur zwei nicht zutreffende Werte: false
und nil
. Alles, was Sie tun müssen, ist zwischen diesen zu unterscheiden. Bis der neue //=
-Operator, der das automatisch ausführt, feststeht, bist du dabei:
Hoffentlich kann dies in zukünftigen Versionen von Ruby abgekürzt werden. 99% der Zeit interessiert dich der Unterschied zwischen den zwei nicht-wahren Werten nicht wirklich, aber 1% der Zeit, die du es machst, wird ärgerlich, um so ungewöhnlich ausführlich zu sein.
Denken Sie daran, dass der Operator defined?
immer "local-variable"
für diese Bedingung zurückgibt, weil die Variable x
als lokale Variable "definiert" ist. Vergleichen Sie mit defined?(nope)
und Sie erhalten nil
, weil diese Variable nicht existiert. Ruby beschäftigt sich mit der betreffenden Variable oder Konstante, nicht wenn diese Variable oder Konstante mit einem Wert definiert wurde .
Tags und Links ruby