根据ApiDock,不推荐使用Ruby方法Enumerable#each_with_object
。除非弄错了(说“不赞成在最新的稳定版本的Rails上使用”,让我怀疑是因为不赞成使用Rails的猴子修补程序,否则为什么不赞成使用它?
嗯,这似乎有点不可思议。
甚至敏捷Rails在某处写道:
“发现Ruby 1.9
each_with_object
方法非常方便,Rails团队为您将其反向移植到Ruby 1.8”。
这似乎是APIdock中的错误?我看不出会有什么原因。
这是拒绝您的问题的前提的答案,也是为了确定它是什么。
方法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,
当初始元素是mutable对象,例如Array
,Hash
,String
时,可以使用each_with_object
。
当初始元素是immutable对象,例如Numeric
时,您必须使用以下inject
。
sum =(1..10).inject(0){| sum,n | sum + n}#=> 55
[Ruby主干源代码中没有注释,方法[[is]]仍然存在(与该页面的声明相反,而且在我能找到的邮件列表中也没有谈论它。APIdock简直是困惑。 APIdock说它已被弃用的地方实际上是标准库中带有该方法的最早版本(而不只是一个ActiveSupport反向扩展),如果您使用的是带有该方法的Ruby,Rails会禁用其版本,因此APIdock似乎对在项目之间迁移的方法感到困惑。