Ruby常量双管等于值与定义?不变

时间:2014-10-16 21:36:32

标签: ruby constants

双管等于:

MY_CONST ||= 42

运营商定义?:

MY_CONST = 42 unless defined? MY_CONST

为什么第二种方式绝对更常见?第一个是否有任何缺点?

1 个答案:

答案 0 :(得分:3)

在一般(常数和变量)情况下,如果MY_CONSTfalsenil,则会将其分配给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