我熟悉Ruby,这是我第一次看到标准库中方法的同义词。现在我在Enumerable模块中找到了那些:
collect <-> map
detect <-> find
include <-> member
etc.
其他模块也可能包含同义方法。他们为什么在那里?它是某种向后兼容性吗?或者它是语言的一个特征,所以程序员可以根据上下文选择不同的选项,使程序看起来像普通的英语?
答案 0 :(得分:3)
我认为它与其他编程语言的单词用法兼容。
Ruby基于Smalltalk。在Smalltalk中,collect
表示地图。但是,世界上大多数编程语言使用map
,因此Ruby添加了map
以使其他人感到熟悉。
有关详细信息,请参阅http://en.wikipedia.org/wiki/Map_function。
答案 1 :(得分:3)
同义词以来自不同脚本或编程背景的用户的熟悉度与现有术语(例如map
,grep
等相比非常熟悉来自Perl背景。)
有时,间接地使用这些同义词也很方便。在Rails associations中,其行为类似于可枚举的,find
被重载以执行实际的SQL查询,而detect
同义词仍然可用于执行实际的可枚举find
} / detect
。