考虑以下两个代码示例:
# Implicit Return
def yo
'swag', 'yolo'
end
whaat, ya = yo
puts ya
puts whaat
# 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
这对我来说不应该抛出错误?
答案 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
,在语法上无效。