ruby - Ruby 中的隐式返回在返回两个值时返回错误

标签 ruby return

考虑以下两个代码示例:

1

    # Implicit Return
    def yo
      'swag', 'yolo'
    end

    whaat, ya = yo

    puts ya
    puts whaat

2

    # Explicit Return
    def yo
      return 'swag', 'yolo'
    end

    whaat, ya = yo

    puts ya
    puts whaat

第一个示例返回此错误:syntax error, unexpected ',', expecting keyword_end,第二个示例非常成功。

所以,这让我很好奇,因为我知道 Ruby 中有很多快捷方式(习语)(例如 2 + 2 实际上是 2.+(2) )如果有什么地方不对劲,你的语法一定要更清楚,把惯用语去掉。

因此,我的问题是 Ruby 如何在幕后处理 returns 对于我来说这不应该引发错误?

最佳答案

方法(和 block 、类定义和模块定义)隐式返回最后计算的表达式。 a, b 根本不是一个有效的表达式,它甚至在句法上都是无效的。 return a, b 一个有效的表达式:您将两个参数传递给 return 关键字。传递多个参数并省略括号是完全合法的。

出于类似的原因,foo(a, b) 有效,但 foo (a, b) 无效:前者将两个参数传递给 foo,后者将一个参数 (a, b) 传递给 foo,这在语法上是无效的。

关于ruby - Ruby 中的隐式返回在返回两个值时返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679162/

相关文章:

ruby - 在 Ruby 中减去两个哈希值

Ruby:选择性类继承?

ruby - 如何在 Ruby 中映射和删除 nil 值

c# - 在 void 方法中使用 return 是不好的做法吗?

ruby - 两种情况有何不同?

ruby - 我如何编写 "if a process is running for longer than n seconds, kill it"的 Resque 条件?

sql-server-2005 - 存储过程中的 IF、RAISERROR 和 RETURN

java - java中 'return'关键字放在哪里?

java - Java 中的整数返回类型

java - 无法从结果类型为 void 错误的方法返回值