如何打印消息然后从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:这个函数也可以用其他更简单的方式编写,我只想通过这个函数来表达我的疑问。
答案 0 :(得分:4)
因为Ruby读取了这一行
print "Your number is: #{num}" && return if num > 10
像这样
print("Your number is: #{num}" && return) if num > 10
在return
有机会print
之前,该方法导致print("Your number is: #{num}") || return if num > 10
。
添加一对括号有助于Ruby解析所需的顺序:
UBound(payCSV, 2)
答案 1 :(得分:2)
您有一个优先级问题,可以使用括号修复。但是,由于您尝试表达控制流,因此应使用控制流运算符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
但是这不再是自然的阅读,是吗?此外,始终会调用return
,因为print
永远不会返回真值。你真的想要:
print "Your number is: #{num}"
return
我只想写:
def foo(num)
if num > 10
puts "Your number is: #{num}"
else
puts "Number too small"
end
end
答案 2 :(得分:1)
emulator -gpu off -avd arch -kernel /pathto/goldfish/arch/x86/boot/bzImage -show-kernel
我认为这是更清洁的方式,使用If三元组合。希望这有帮助
答案 3 :(得分:1)
由于print
(和puts
)返回nil
,所以效果也很好:
def foo(num)
return print "Your number is: #{num}" if num > 10
print "Number too small"
end
并且为了显示出更清晰的意图,请将guard clause放在第一位:
def foo(num)
return print "Number too small" if num <= 10
print "Your number is: #{num}"
end
示例:
> foo 47
Your number is: 47=> nil
> foo 7
Number too small=> nil
答案 4 :(得分:0)
出于好奇:
def foo(num)
print case num
when -Float::INFINITY...10 then "Number too small"
else "Your number is: #{num}"
end
end
答案 5 :(得分:0)
如果语句使用;
def foo(num)
if num < 10; print "Your number is: #{num}" && return; end
print "Number too small"
end
答案 6 :(得分:0)
这是另一个:
print "Your number is: #{num}" and return if num > 10
更新:忽略我的回答!正如工程师们解释的那样,这是完全错误的。