我用谷歌搜索了这个,得到了不完整/矛盾的意见——做一个实际上有什么区别吗?map
并做一个collect
在 Ruby/Rails 中的数组上?
The docs似乎没有提出任何建议,但是方法或性能可能存在差异吗?
其实没有什么区别map
在 C 中实现为rb_ary_collect
and enum_collect
(例如,之间存在差异map
在数组和任何其他枚举上,但之间没有区别map
and collect
).
为什么两者都做map
and collect
存在于红宝石中吗? The map
函数在不同语言中有许多命名约定。维基百科提供了概述:
映射函数起源于函数式编程语言,但如今在许多过程语言、面向对象语言和多范式语言中也得到支持(或可能被定义):在 C++ 的标准模板库中,它被称为transform
,在 C# (3.0) 的 LINQ 库中,它作为扩展方法提供,称为Select
。 Map也是Perl、Python、Ruby等高级语言中经常使用的操作;该操作称为map
所有这三种语言。A collect
Ruby 中还提供了 map 的别名(来自 Smalltalk)[强调我的]。 Common Lisp 提供了一系列类似地图的函数;与此处描述的行为相对应的称为mapcar
(-car 表示使用 CAR 操作进行访问)。
Ruby 为来自 Smalltalk 世界的程序员提供了一个别名,让他们感觉更自在。
为什么数组和枚举有不同的实现?枚举是一种广义的迭代结构,这意味着 Ruby 无法预测下一个元素是什么(您可以定义无限枚举,请参阅Prime举个例子)。因此它必须调用一个函数来获取每个连续的元素(通常这将是each
方法)。
数组是最常见的集合,因此优化其性能是合理的。由于 Ruby 了解很多关于数组如何工作的知识,因此不必调用each
但只能使用简单的指针操作这明显更快。
许多数组方法都存在类似的优化,例如zip
or count
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)