2012-03-11 63 views
1

在Ruby中,许多其他语言所需的但感觉冗余的东西从语言规范中删除。其中,一个重要的例子是分号。除非您想连续发表声明,否则可以省略分号。有没有逗号有时多余?

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

This question我投票结束,让我想起了这个问题。

回答

4

没有理由它不能

Haskell没有方法参数的逗号,虽然它为数组元素定界。

Smalltalk根本没有逗号,因为它们在Ruby-since中存在。鉴于Ruby受到Smalltalk的影响,似乎添加逗号是故意的语言选择。 (话又说回来,Smalltalk的参数列表样式更像是通过哈希与争论,但仍然是逗号少。)

红宝石,不过,确实有使用逗号少数组常量:

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

+0

我明白了。这是逗号和括号之间的折衷。这似乎是这种情况。 – sawa 2012-03-11 23:33:39

+0

@sawa以我个人的口味,我宁愿输入逗号而不是括号。 – 2012-03-12 00:08:31

+0

@SonySantos但有一点要注意的是,当你有嵌套结构的时候,原则上你可以用逗号避开,并用lisp等括号完全表达,但是你不能用逗号来表达。用逗号,当你有嵌套结构时,你总是需要括号的帮助。 – sawa 2012-03-12 00:50:34