如何打印一条消息,然后从ruby中的函数返回?
2.3.4 :038 > def foo(num)
2.3.4 :039?> print "Your number is: #{num}" && return if num > 10
2.3.4 :040?> print "Number too small"
2.3.4 :041?> end
=> :foo
2.3.4 :042 > foo(47)
=> nil
2.3.4 :043 > foo(7)
Number too small => nil
2.3.4 :044 >当我用47调用foo时,为什么输出中没有Your number is: 47?
PS:这个函数也可以用其他更简单的方式编写,我只是想通过这个函数来表达我的疑问。
发布于 2017-07-31 22:45:11
因为Ruby读了下面这行
print "Your number is: #{num}" && return if num > 10像这样
print("Your number is: #{num}" && return) if num > 10这导致该方法在有机会print任何东西之前使用return。
添加一对括号可以帮助Ruby解析所需的顺序:
print("Your number is: #{num}") || return if num > 10发布于 2017-08-01 00:57:36
您有一个可以使用括号修复的优先级问题。但是,由于您试图表达控制流,因此应该使用控制流运算符and和or,而不是布尔运算符&&和||。
这个成语的工作原理是这样的:(仅举个例子,它并不局限于return和fail)
do_something and return "it worked"或者:
do_something or fail "it didn't work"它允许您根据第一个表达式是否成功来计算第二个表达式。do_something应该在成功的情况下返回真值,在失败的情况下返回假值。
然而,print总是返回nil,所以在这方面它不会像预期的那样工作。你必须颠倒逻辑:
print "Your number is: #{num}" or return但这不再是自然而然的了,不是吗?此外,因为print永远不会返回真值,所以总是调用return。你实际上想要:
print "Your number is: #{num}"
return因此,我会简单地写下:
def foo(num)
if num > 10
puts "Your number is: #{num}"
else
puts "Number too small"
end
end发布于 2017-07-31 22:45:16
def foo(num)
puts(num > 10 ? "Your number is: #{num}" : "Number too small")
end我认为这是一种更简洁的方式,使用If三元。希望这能有所帮助
https://stackoverflow.com/questions/45418908
复制相似问题