2

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

但是,即使我开始学习它,我也被这样一个事实所排斥,即经常有几种方法可以做相同(或等效)的事情。我举几个例子:

  • 方法通常有别名,因此您总是不得不费心选择最合适、最流行或最普遍接受的替代方法
  • andor,除此之外&&||- 看看它们之间的混淆优先级差异导致了多少
  • for关键字,几乎只由没有经验的非本地 Ruby 开发人员使用

这种设计决策背后的基本原理是什么?他们(Matz?)是否相信这种语言会更容易被采用,因此更受欢迎?

4

3 回答 3

7

Ruby 受到 Perl 的启发,Perl 的一个重要理念是“有不止一种方法可以做到这一点”,即冗余很好,因为它们给了程序员更多的自由(并且增加了他们想要的功能在名称下可用的可能性)他们会给它 - 不仅仅是一个)。你的决定是否真的是一件好事。

于 2010-07-21T12:31:53.787 回答
1

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

Matz 也受到 Perl 的启发,Perl 的口号是“有不止一种方法”。

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

我不打算解释和 vs && 虽然......

于 2010-07-21T12:29:28.360 回答
1

请注意,andvs.&&虽然相似,但具有不同的优先级。
a = b && c # => 等价于 a = (b 和 c)。a 设置为布尔值。
a = b and c # => 等价于 (a = b) 和 c。a 设置为 b,表达式是布尔值。

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

于 2010-07-21T12:40:09.513 回答