在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中提供的。它是k组合器的一个实现,通常被称为Kestrel。Ruby核心库现在提供了一个等效的方法Object#tap。只需将代码片段中的returning替换为tap,它就会像您期望的那样工作。

然而,对于你想要做的,这是完全没有必要的。对于更简单的表达式,使用mapHash::[]:

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

最新更新