根据ApiDock,不推荐使用Ruby方法Enumerable#each_with_object
。除非它是错误的(说“在Rails的最新稳定版本上弃用”让我怀疑它可能是Rails的猴子修补已被弃用),为什么它被弃用?
答案 0 :(得分:50)
这是对否定你的问题预设的答案,也是为了确定它是什么。
方法each_with_object
可以节省额外的击键次数。假设您要从数组中创建哈希。使用inject
,您需要额外的h
以下内容:
array.inject({}){|h, a| do_something_to_h_using_a; h} # <= extra `h` here
但是使用each_with_object
,您可以保存输入内容:
array.each_with_object({}){|a, h| do_something_to_h_using_a} # <= no `h` here
所以尽可能使用它是好的。但是有一个限制。我也回答了here,
如果初始元素是可变对象,例如Array
,Hash
,String
,则可以使用each_with_object
如果初始元素是不可变对象,例如Numeric
,则必须使用inject
,如下所示。
sum =(1..10).inject(0){| sum,n | sum + n}#=&gt; 55
答案 1 :(得分:10)
Ruby主干源代码中没有任何注释,方法 仍然存在(与该页面的声明相反),并且我无法在邮件列表中找到它。< / p>
APIdock很简单。 APIdock说它已被弃用的地方实际上是标准库中使用该方法的最早版本(而不仅仅是ActiveSupport反向扩展),如果你使用的是具有该方法的Ruby,Rails会禁用它的版本,因此APIdock似乎对在项目之间迁移的方法感到困惑。
答案 2 :(得分:9)