我试图在不存在的情况下初始化一个常数,如果一个常数已经存在,则使用它。我尝试了下面的警告。
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
如何处理这种情况?
尝试此
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
将不起作用,因为我们在使用 ||
之前没有在任何地方定义它。