Ruby中的“返回除非nil”语句

时间:2012-10-31 01:12:11

标签: ruby

我有以下代码:

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

为什么?

2 个答案:

答案 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继续执行下一行并执行它。