{ "y" => 20 } } hash2 = {"x" => { "y-6ren">
gpt4 book ai didi

ruby - 在 Ruby 中传递一个将参数作为参数的方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:15:21 29 4
gpt4 key购买 nike

我想尽可能简明地计算具有相同结构的 2 个散列内的各种值的差异。这是我要比较的数据的简化示例:

hash1 = {"x" => { "y" => 20 } }
hash2 = {"x" => { "y" => 12 } }

我有一个非常简单的方法来获取我想要比较的值。实际上,散列可以比这些示例嵌套得更深,所以这主要是为了保持代码的可读性:

def get_y(data)
data["x"]["y"]
end

我想创建一个方法来计算这两个值之间的差异,并且可以将 get_y 之类的方法作为参数,从而允许我为哈希。我希望能够调用这样的东西,但我不确定如何编写方法 get_delta:

get_delta(hash1, hash2, get_y)    # => 8

最佳答案

“Ruby 方式”是传递一个 block :

def get_delta_by(obj1, obj2)
yield(obj1) - yield(obj2)
end

hash1 = {"x" => { "y" => 20 } }
hash2 = {"x" => { "y" => 12 } }

get_delta_by(hash1, hash2) { |h| h["x"]["y"] }
#=> 8

方法可以通过(间接)通过:

def get_y(data)
data["x"]["y"]
end

get_delta_by(hash1, hash2, &method(:get_y))
#=> 8

关于ruby - 在 Ruby 中传递一个将参数作为参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37438419/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com