双管等于:
MY_CONST ||= 42
运营商定义?:
MY_CONST = 42 unless defined? MY_CONST
为什么第二种方式绝对更常见?第一个是否有任何缺点?
答案 0 :(得分:3)
在一般(常数和变量)情况下,如果MY_CONST
为false
或nil
,则会将其分配给42.
具体到常数情况,你不应该重新分配常量(虽然Ruby会允许你); defined?
检查是否已经宣布常量。
要证明这两个问题:
2.0.0-p353 :001 > MY_CONST = false
=> false
2.0.0-p353 :002 > MY_CONST ||= 42
(irb):2: warning: already initialized constant MY_CONST
(irb):1: warning: previous definition of MY_CONST was here
=> 42
2.0.0-p353 :003 > MY_CONST
=> 42