我以为:
do_something if condition
Run Code Online (Sandbox Code Playgroud)
相当于
if condition
do_something
end
Run Code Online (Sandbox Code Playgroud)
我发现了一个不遵守这条规则的代码.
if !(defined? foo)
foo = default_value
end
Run Code Online (Sandbox Code Playgroud)
在这里,foo需要default_value.
foo = default_value if !(defined? foo)
Run Code Online (Sandbox Code Playgroud)
在这里,foo需要nil.在以前的代码中,我认为if首先执行,并且应该等同于:
foo = (default_value if !(defined? foo))
Run Code Online (Sandbox Code Playgroud)
default_value如果没有定义变量,有没有办法设置?
一般答案:
有几条评论想要使用||=运算符......如果foo是nil:
foo ||= default_value
Run Code Online (Sandbox Code Playgroud)
将foo定义时返回默认值.
我坚持使用"不defined?",这不等于nil.
Ruby方式是
foo ||= default_value
Run Code Online (Sandbox Code Playgroud)
但是当然
if (defined? foo)
foo = default_value
end
Run Code Online (Sandbox Code Playgroud)
和
foo = default_value if !(defined? foo)
Run Code Online (Sandbox Code Playgroud)
是不同的.你不是在比较同样的事情.
在一个你比较(defined? foo)和你比较的另一个!(defined? foo)
我认为你真正追求的是以下内容
if !(defined? foo)
foo = default_value
end
Run Code Online (Sandbox Code Playgroud)