"if"条件的位置

pie*_*ard 1 ruby

我以为:

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如果没有定义变量,有没有办法设置?

一般答案:

有几条评论想要使用||=运算符......如果foonil:

foo ||= default_value
Run Code Online (Sandbox Code Playgroud)

foo定义时返回默认值.

我坚持使用"不defined?",这不等于nil.

dee*_*our 5

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)