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

时间:2016-09-24 17:37:47

标签: 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这对我来说不应该抛出错误?

2 个答案:

答案 0 :(得分:3)

我认为可能是

def yo
  ['swag', 'yolo']
end

它应该有效,但它没有回答你的问题

答案 1 :(得分:3)

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

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