1

在 Ruby 中,许多在其他语言中需要但被认为是多余的东西都从语言规范中删除了。其中,一个重要的例子是分号。除非您想连续放置语句,否则可以省略分号。

但是还有一个我通常觉得多余的字符,在 Ruby 中仍然需要它。那是逗号。在某些情况下,逗号不是多余的吗,例如,当方法参数或数组元素或哈希元素连续放在同一行时,或者即使它们在不同的行上也被一对括号包围?为什么 Ruby 不能像 shell 脚本那样没有逗号,并且只能选择性地使用它们来指示方法参数/数组元素/散列元素继续到下一行?如果 Matz 继续将分号设为可选,为什么他不为逗号做呢?

我投票结束的这个问题让我想到了这个问题。

4

1 回答 1

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 等人做出的语言选择。没有理由不这样做,这只是他们认为最有意义的。

于 2012-03-11T22:47:38.400 回答