我有以下代码:
def test
show_msg and return unless nil
puts "This line can not be executed"
end
def show_msg
puts "exit here"
end
test
输出:
exit here
This line can not be executed
我期待唯一在线:
exit here
为什么?
答案 0 :(得分:3)
如评论中所述,这不起作用,因为puts
实际上是returns nil,因此您可以明确地从show_msg
函数中返回一些内容,或者使用p
例如
def test
show_msg and return unless nil
puts "This line can not be executed"
end
def show_msg
p "exit here"
end
test
答案 1 :(得分:3)
我不确定你要对unless nil
做些什么;这是一个无操作,因为nil
永远不会是真正的价值。 (在Ruby中,nil
是除false
之外的一个值,在布尔真值测试上下文中被认为是假的。令人困惑的是,nil
“是假的”,当它是不等于false
,所以Rubyists反而说nil
是“假的”)。
无论如何,return unless nil
与普通return
相同。
您的show_msg
方法缺少明确的return
语句,将返回其中最后一个语句的值。该语句是puts
,返回nil
。因此show_msg
也会返回nil
,并且由于nil
是假的,and
会在它到达return
之前发生短路。因此,return
未执行,Ruby继续执行下一行并执行它。