为何Ruby支持方法调用末尾逗号却不支持方法定义末尾逗号?
为什么Ruby允许方法调用用末尾逗号,却禁止方法定义用?
Ruby这么设计主要是出于语法灵活性和定义严谨性的平衡:
方法调用的末尾逗号是专门做的语法糖,目的是让代码更好维护。比如你要给方法加个新参数时,直接在最后一行加就行,不用特意去给上一行补逗号;或者把参数拆成多行写的时候,每行末尾都带逗号,排版更整齐。Ruby解析器遇到调用里的末尾逗号会直接忽略,不会影响参数的解析,就像没加一样。比如你写:
def foo(bar, baz); end foo(1, 2,)解析器会当成
foo(1, 2)来执行,完全没问题。但方法定义的参数列表是严格的语法结构,它需要明确告诉你这个方法接受哪些参数。如果允许末尾逗号,解析器会认为“后面应该还有一个参数名没写”,自然就抛出语法错误了。比如你写:
def foo(bar, baz,); end # 这里会报错:syntax error, unexpected ')'因为解析器看到逗号后,会等着下一个参数的定义,结果直接遇到了
),就触发了语法错误。
简单说就是:调用时的末尾逗号是给开发者的书写便利,定义时的参数列表要严谨,不能有这种“模棱两可”的写法。
内容的提问来源于stack exchange,提问作者pixatlazaki
相关产品推荐
相关产品推荐

