首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby:如何在if条件中组合put和return?

Ruby:如何在if条件中组合put和return?
EN

Stack Overflow用户
提问于 2017-07-31 22:41:46
回答 6查看 1.8K关注 0票数 3

如何打印一条消息,然后从ruby中的函数返回?

代码语言:javascript
复制
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:这个函数也可以用其他更简单的方式编写,我只是想通过这个函数来表达我的疑问。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-07-31 22:45:11

因为Ruby读了下面这行

代码语言:javascript
复制
print "Your number is: #{num}" && return if num > 10

像这样

代码语言:javascript
复制
print("Your number is: #{num}" && return) if num > 10

这导致该方法在有机会print任何东西之前使用return

添加一对括号可以帮助Ruby解析所需的顺序:

代码语言:javascript
复制
print("Your number is: #{num}") || return if num > 10
票数 6
EN

Stack Overflow用户

发布于 2017-08-01 00:57:36

您有一个可以使用括号修复的优先级问题。但是,由于您试图表达控制流,因此应该使用控制流运算符andor,而不是布尔运算符&&||

这个成语的工作原理是这样的:(仅举个例子,它并不局限于returnfail)

代码语言:javascript
复制
do_something and return "it worked"

或者:

代码语言:javascript
复制
do_something or fail "it didn't work"

它允许您根据第一个表达式是否成功来计算第二个表达式。do_something应该在成功的情况下返回真值,在失败的情况下返回假值。

然而,print总是返回nil,所以在这方面它不会像预期的那样工作。你必须颠倒逻辑:

代码语言:javascript
复制
print "Your number is: #{num}" or return

但这不再是自然而然的了,不是吗?此外,因为print永远不会返回真值,所以总是调用return。你实际上想要:

代码语言:javascript
复制
print "Your number is: #{num}"
return

因此,我会简单地写下:

代码语言:javascript
复制
def foo(num)
  if num > 10
    puts "Your number is: #{num}"
  else
    puts "Number too small"
  end
end
票数 4
EN

Stack Overflow用户

发布于 2017-07-31 22:45:16

代码语言:javascript
复制
def foo(num)
   puts(num > 10 ? "Your number is: #{num}" : "Number too small")
end

我认为这是一种更简洁的方式,使用If三元。希望这能有所帮助

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45418908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档