我有一个看起来像这样的代码块:
returning({}) do |hash|
attributes.each { |key, value|
hash[key.underscore] = value
}
end
将其重写为不使用返回魔法修复了此方法与 Ruby 1.9.3 的冲突。这真的解决了什么问题,还是我只是错过了一些明显的东西?
谢谢。
我有一个看起来像这样的代码块:
returning({}) do |hash|
attributes.each { |key, value|
hash[key.underscore] = value
}
end
将其重写为不使用返回魔法修复了此方法与 Ruby 1.9.3 的冲突。这真的解决了什么问题,还是我只是错过了一些明显的东西?
谢谢。
我个人从未听说过returning
。但是您的代码段可以用更标准的方法重写。
attributes.each_with_object({}) do |(key, value), memo|
memo[key.underscore] = value
end
该方法returning
在 Ruby 中从来都不是标准方法。它是在 Rails 早期版本的 Rails 的 ActiveSupport 中提供的。它是通常被称为Kestrel的 K-combinator 的实现。Ruby 核心库现在提供了一个等效的方法Object#tap
。只需在您的代码段中替换这个词tap
,returning
它就会按您的预期工作。
但是,对于您要尝试做的事情,这根本是不必要的。使用map
and Hash::[]
,以获得更简单的表达式:
Hash[ attributes.map { |k, v| [k.underscore, v] } ]