为什么Ruby有这么多的冗余?

我爱Ruby,在过去的几年里,它是我的首选语言。

但是,即使从我开始学习它,我也被这样的事实所击退:通常有几种方法可以做同样的事情(或同等的事情)。 我将举几个例子:

  • 方法通常有别名,所以你总是不得不费心去选择最合适,最受欢迎或普遍接受的替代品
  • andor ,除了&&|| – 只需看看它们之间的混淆优先级差异有多大
  • for keyword,几乎完全由没有经验的非本机Ruby开发人员使用

这种设计决策背后的理由是什么? 他们(Matz?)是否认为语言更容易采用,因此更受欢迎?

Ruby受到Perl的启发,一个重要的Perl哲学是“有多种方法可以做到”,即redunancies很好,因为它们给程序员更多的自由(并且增加了他们想要的function在名称下可用的几率)他们会给它 – 不仅仅是一个)。 你的决定是否真的是一件好事。

当Matz写Ruby时,他试图遵循“最小惊喜原则”。 通常这意味着有不止一种方法可以做同样的事情,例如使用方括号或插入方法分配数组。 我喜欢它,因为我发现它不是试图记住在哪种情况下使用哪个确切的名称(我总是习惯在Java中暂停一下大小与长度),我只是写出看似合乎逻辑的东西,通常它会工作。 在阅读代码时,使用不同的名称通常不是问题,因为名称通常是不言自明的。 所以,我不担心哪个最适合或最受欢迎,我选择当时最符合逻辑的。

Matz也受到了Perl的启发,Perl的口号是“有多种方法可以做到”。

我不相信Matz担心什么是最受欢迎的,他只是想写他想要使用的语言。

我不会尝试解释和vs &&虽然……

请注意,与&&相比,虽然相似,却有不同的优先权。
a = b && c #=>相当于a =(b和c)。 a设置为布尔值。
a = b and c #=>相当于(a = b)和c。 a设置为b,表达式是布尔值。

有不止一种方法可以做到,但它们之间可能存在细微差别。 (更新,刚刚注意到你在你的问题中提到了优先级差异……抱歉。这里没什么可看的。继续前进。)