Ruby中的方法同义词

Ruby中的方法同义词,ruby,Ruby,我正在熟悉Ruby,这是我第一次在标准库中看到方法的同义词。目前,我在可枚举模块中找到了: collect <-> map detect <-> find include <-> member etc. 收集地图 发现 包括成员 等 可能其他模块也包含同义方法。他们为什么在那里?这是某种向后兼容吗?或者它是语言的一个特性,因此程序员可以根据上下文在不同选项之间进行选择,使程序看起来像纯英语?我认为它是为了与其他编程语言的单词用法兼容而设计的。 Ruby基于

我正在熟悉Ruby,这是我第一次在标准库中看到方法的同义词。目前,我在可枚举模块中找到了:

collect <-> map
detect <-> find
include <-> member
etc.
收集地图
发现
包括成员
等

可能其他模块也包含同义方法。他们为什么在那里?这是某种向后兼容吗?或者它是语言的一个特性,因此程序员可以根据上下文在不同选项之间进行选择,使程序看起来像纯英语?

我认为它是为了与其他编程语言的单词用法兼容而设计的。 Ruby基于Smalltalk。在Smalltalk中,
collect
表示地图。然而,世界上大多数编程语言都使用
map
,因此Ruby添加了
map
,以使其他人感到熟悉


有关更多详细信息,请参见。

同义词建立在来自不同脚本或编程背景的用户对现有术语的熟悉程度基础上(例如,
map
grep
等,来自Perl背景的人非常熟悉)


有时,这些同义词也会间接地派上用场,例如在Rails中,它也意味着其行为类似于可枚举,
find
被重载以执行实际的SQL查询,而
detect
同义词仍然可用以执行实际的可枚举
find
/
detect

我没有得到find/detect部分。你是说在某些场景中它们之间有区别吗?@Max:是的,在其中一个方法被重写而另一个没有被重写的场景中会有区别。例如,如果执行
def find(*x)nil end
,则
find
将始终失败,但
detect
仍将工作。+1。Ruby在更多的场合使用同义词,(我认为)不仅是为了向后兼容,也是为了可读性。例如,可以使用
计数
长度
大小
检索数组中的元素数。数组的同一属性使用不同的词,但是通过这种方式,Ruby使您能够在代码中选择最合适的词:您想要收集的项数、数组的长度还是结构的当前大小?显然,它们都是一样的,但是选择正确的单词可以使代码在上下文中更容易阅读;这是一种很好的语言特性。