问题描述
在 Ruby 中,如果变量尚未定义,如何将变量设置为某个值,如果已定义,如何保留当前值?
In Ruby, how do you set a variable to a certain value if it is not already defined, and leave the current value if it is already defined?
推荐答案
While x ||= value
是一种表达如果 x 包含假值,包括 nil(隐含在这个结构如果 x 未定义,因为它出现在赋值的左侧),为 x 赋值",它就是这样做的.
While x ||= value
is a way to say "if x contains a falsey value, including nil (which is implicit in this construct if x is not defined because it appears on the left hand side of the assignment), assign value to x", it does just that.
它大致等同于以下内容.(但是,x ||= value
不会像这个代码那样抛出 NameError
可能,它总是会为 x 赋值
因为这段代码没有 - 关键是要看到 x ||= value
对于 x 中的 any 假值(包括默认值")的作用相同nil
值):
It is roughly equivalent to the following. (However, x ||= value
will not throw a NameError
like this code may and it will always assign a value to x
as this code does not -- the point is to see x ||= value
works the same for any falsey value in x, including the "default" nil
value):
if !x
x = value
end
要查看变量是否真正没有被赋值,请使用defined?
方法:
To see if the variable has truly not been assigned a value, use the defined?
method:
>> defined? z
=> nil
>> z = nil
=> nil
>> defined? z
=> "local-variable"
>> defined? @z
=> nil
>> @z = nil
=> nil
>> defined? @z
=> "instance-variable"
但是,几乎在所有情况下,使用 defined?
是代码异味. 小心电源.做明智的事情:在尝试使用变量之前先给它们值:)
However, in almost every case, using defined?
is code smell. Be careful with power. Do the sensible thing: give variables values before trying to use them :)
快乐编码.
这篇关于如果尚未定义,则设置 Ruby 变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!