因此,通常在if条件中初始化变量,然后在if的块内使用该变量.
if a = foo()
puts a
end
Run Code Online (Sandbox Code Playgroud)
但是,当我初始化一个变量并在同一个if块中使用它时,那个var将不会被认为是初始化的.例如:
def good?(item)
puts "item is #{item.inspect}"
true
end
if b = 52 && good?(b)
puts "b is #{b.inspect}"
end
Run Code Online (Sandbox Code Playgroud)
运行上面的结果将是
item is nil
b is true
Run Code Online (Sandbox Code Playgroud)
为什么会这样?什么样的关键字与我搜索和研究的这种Ruby行为有关?
优先级&&高于=,所以
if b = 52 && good?(b)
Run Code Online (Sandbox Code Playgroud)
相当于:
if b = (52 && good?(b))
Run Code Online (Sandbox Code Playgroud)
参考:运算符优先级.
你要分配给你b的结果52 && good?(b).b它仍然nil是传递给good?.
括号是关键.
def good?(item)
puts "item is #{item.inspect}"
true
end
if (b = 52) && good?(b)
puts "b is #{b.inspect}"
end
Run Code Online (Sandbox Code Playgroud)
结果:
item is 52
b is 52
Run Code Online (Sandbox Code Playgroud)