Ruby 1.9.3中的返回函数是否​​被破坏?

时间:2013-03-31 07:48:29

标签: ruby

我有一段看起来像这样的代码:

returning({}) do |hash|
attributes.each { |key, value|
        hash[key.underscore] = value
    }

end

重写这个不使用返回魔法修复此方法打破Ruby 1.9.3。这真的能解决问题吗,还是我错过了一些明显的东西?

感谢。

2 个答案:

答案 0 :(得分:1)

我个人从未听说过returning。但是你的代码片段可以用更标准的方法重写。

attributes.each_with_object({}) do |(key, value), memo|
  memo[key.underscore] = value
end

答案 1 :(得分:0)

方法returning从来就不是Ruby中的标准方法;它是在早期版本的Rails中的Rails'ActiveSupport中提供的。它是K-combinator的一个实现,通常被称为Kestrel。 Ruby核心库现在提供了一个等效的方法Object#tap。只需在代码段中用tap代替returning,它就会按预期运作。

然而,对于你想要做的事情,它根本就没有必要。使用mapHash::[]可以更简单地表达:

Hash[ attributes.map { |k, v| [k.underscore, v] } ]