2014-01-20 68 views
0

我想初始化一个常量,如果它不存在,如果已经存在,然后使用它。我尝试了下面的警告。如何处理初始化常量?

User = User || Struct.new(:name) #NameError: uninitialized constant User 
User = Struct.new(:name) || User #works (1st time) 

但这句话会遇到多次,这种情况发生时,我得到

User = Struct.new(:name) || User 

#warning: already initialized constant User 
#warning: previous definition of User was here 

如何处理这种情况?

回答

2

试试这个

User ||= Struct.new(:name) 

User = User || Struct.new(:name)这是行不通的,因为User正与条件运算||定义它前检查。因此,您得到的错误为NameError:未初始化的常量用户。例如

# first try that way 
X = X || 2 #uninitialized constant X (NameError) 
# then comment the above and try below way 
X ||= 2 
X # => 2 

X = X || 2将无法​​正常工作,因为我们没有使用它与||之前的任何地方定义它。

+0

啊哈,我觉得'a || = b'等于'a = a || b' – Bala

+0

@Bala不,它不是..我明白, –