【发布时间】:2014-08-20 19:01:12
【问题描述】:
在 Ruby 中以功能性和不可变的方式这样做的正确方法是什么:
a = { price: 100, foo: :bar, bar: :baz }
def reduced_price(row)
row.merge(price: row[:price] / 2)
end
reduced_price(a) # => { price: 50, foo: :bar, bar: :baz }
我不想改变任何东西,我不喜欢 row.merge(key: row[:key]) 的构造,因为它重复了 :key 并引用了 row 两次。如果有类似的东西:
{a: 1, b: 2}.apply_to_key(:a) { |x| x * 10 } # => {a: 10, b: 2}
那太好了。
总而言之,我想要一个方法,当给定一个键时,该键使用前一个值更新散列的单个值,然后返回整个散列。
【问题讨论】:
标签: ruby functional-programming method-chaining