在Ruby中,从语言规范中删除了许多其他语言所需但被认为是多余的东西。其中一个重要的例子是分号。除非你想连续发表声明,否则你可以省略分号。
但是还有另一个角色我通常觉得多余,而且在Ruby中仍然需要。那是逗号。在某些情况下,逗号是不是冗余,即,当方法参数或数组元素或散列元素连续放在同一行上时,或者当它们被一对括号包围时,即使它们位于不同的行上?为什么Ruby不能像shell脚本一样没有逗号,并且只能选择性地使用它们来指示方法参数/数组元素/哈希元素继续到下一行?如果Matz继续选择分号,他为什么不用逗号来表达呢?
我投票结束的{p> This question让我思考这个问题。答案 0 :(得分:4)
没有理由无法。
Haskell没有方法参数的逗号,尽管它用于数组元素分隔。
Smalltalk根本没有逗号,因为它们存在于Ruby中。鉴于Ruby受Smalltalk的影响,似乎添加逗号是一种刻意的语言选择。 (然后,Smalltalk的参数列表样式更像是使用参数传递哈希,但仍然是逗号。)
但是,Ruby确实有使用文字的无逗号数组:%w[I don't have any commas!] #=> ["I", "don't", "have", "any", "commas!"]
最后,我认为要问的问题是,是否让逗号更清晰,更容易解析。例如,这有多清楚:
foo bar baz
那是foo (bar baz)
还是foo (bar (baz))
?或者甚至可能((foo) bar) baz)
(尽管这在非功能性语言中可能没有多大意义)?虽然显然知道无论优先级是什么都可以让你弄明白这一点,但这也意味着你可能需要更频繁地包含括号,而使用逗号则差别很明显:
foo bar baz # foo(bar(baz))
foo bar, baz # foo(bar, baz)
显然,在Ruby中省略括号有时也会导致歧义,但通常会导致语法错误,而不是依赖于事物的优先级。
最终,这是Matz等人的语言选择。没有理由不这样做,这正是他们认为最有意义的。