Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Ruby有这么多冗余?_Ruby_Language Design_Redundancy - Fatal编程技术网

为什么Ruby有这么多冗余?

为什么Ruby有这么多冗余?,ruby,language-design,redundancy,Ruby,Language Design,Redundancy,我喜欢Ruby,在过去的几年里,它是我的首选语言 但是,即使从我开始学习它,我还是被一个事实所排斥,那就是经常有几种方法来做相同(或等效)的事情。我将举几个例子: 方法通常有别名,因此您总是需要费心选择最合适、最流行或最普遍接受的替代方法 和和或,除了&和|之外,只要看看它们之间的优先级差异会导致多少混乱 for关键字,几乎完全由缺乏经验的非本地Ruby开发人员使用 这些设计决策背后的基本原理是什么?他们(Matz?)相信这种语言会更容易被采用,从而更受欢迎吗?当Matz写Ruby时,他试图

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

但是,即使从我开始学习它,我还是被一个事实所排斥,那就是经常有几种方法来做相同(或等效)的事情。我将举几个例子:

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

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

当Matz写Ruby时,他试图遵循“最小惊喜原则”。这通常意味着有多种方法可以完成相同的任务,例如,使用方括号或插入方法为数组赋值。我很喜欢它,因为我发现我没有试着记住在什么情况下使用哪个确切的名称(我总是在Java中暂停片刻,看大小和长度),我只是写一些看起来合乎逻辑的东西,通常它会起作用。在阅读代码时,使用不同的名称通常不是问题,因为名称通常是自解释的。所以,我不担心哪一个最合适或最受欢迎,我选择了当时最合乎逻辑的

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

我不相信Matz担心什么会是最流行的,他只是想写他想用的语言


我不会试图解释和vs&&尽管

Ruby的灵感来自Perl,Perl的一个重要理念是“有不止一种方法可以做到这一点”,即重新协商是好的,因为它给了程序员更多的自由(并且增加了他们想要的功能以他们给它的名称提供的可能性,而不仅仅是一个名称)。你的决定是否真的是件好事。

请注意,
和&
虽然相似,但优先级不同
a=b和&c
#=>相当于a=(b和c)。a设置为布尔值
a=b和c
#=>相当于(a=b)和c。a设置为b,表达式为布尔值

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