Wie stellst du einen booleschen Standardwert in Ruby ein?

8

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?

    
evanrmurphy 09.11.2012, 04:59
quelle

3 Antworten

10

Sie müssen defined? zuerst haben, andernfalls erreicht der Parser x = und definiert dann x (was nil ergibt), bevor unless :

ausgeführt wird %Vor% %Vor%

Das Ausführen eines if / unless -Blocks (anstelle von nach- if / unless einlinig) funktioniert ebenfalls:

%Vor% %Vor%     
Andrew Marshall 09.11.2012, 05:22
quelle
2

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:

%Vor%

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 .

    
tadman 09.11.2012 05:01
quelle
-1
%Vor%     
vijikumar 09.11.2012 07:11
quelle

Tags und Links