首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby:"&& return“vs "and return”

Ruby:"&& return“vs "and return”
EN

Stack Overflow用户
提问于 2016-09-22 11:55:03
回答 1查看 8.8K关注 0票数 24

在阅读http://guides.rubyonrails.org/layouts_and_rendering.html#avoiding-double-render-errors的Rails指南时,我编写了一个测试程序来测试Ruby的&& return,我得到了这个奇怪的行为:

代码语言:javascript
复制
def test1
  puts 'hello' && return
  puts 'world'
end

def test2
  puts 'hello' and return
  puts 'world'
end

以下是结果输出:

代码语言:javascript
复制
irb(main):028:0> test1
=> nil
irb(main):029:0> test2
hello
world
=> nil

造成这种差异的原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-22 12:30:10

查看the difference between and and &&。在您给出的示例中,调用方法puts时其参数周围没有括号,优先级的不同会改变它的解析方式。

在测试1中,&&的优先级高于方法调用。所以实际发生的是puts('hello' && return)。参数总是在调用它们的方法之前计算--所以我们首先计算'hello' && return。因为'hello'是真的,所以布尔值不会短路,并计算return。当返回时,我们退出方法而不做其他任何事情:所以不会记录任何东西,第二行也不会运行。

在测试2中,and的优先级低于方法调用。所以发生的是puts('hello') and returnputs方法记录传递给它的内容,然后返回nilnil是一个假值,因此and表达式短路,return表达式永远不会求值。我们只需移动到运行puts 'world'的第二行。

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

https://stackoverflow.com/questions/39629976

复制
相关文章

相似问题

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