gpt4 book ai didi

ruby - 返回参数的名称而不是它的值 - Ruby

转载 作者:行者123 更新时间:2023-12-04 02:37:07 25 4
gpt4 key购买 nike

我需要打印 .max 函数的结果,但显示其参数的名称,而不是 .max 方法使用的目标值(数字)。

def who_is_bigger(a,b,c)
"#{[a,b,c].max} is bigger"
end

预期结果:

expect(who_is_bigger(84, 42, 21)).to eq("a is bigger")
expect(who_is_bigger(42, 84, 21)).to eq("b is bigger")
expect(who_is_bigger(42, 21, 84)).to eq("c is bigger")

最佳答案

据我所知,没有一种轻松或易于理解的方法可以从参数的值中获取参数的名称。 (请参阅答案的底部,了解这样做的一种方法。)

相反,这是我的做法,我认为它很好并且可读:

def who_is_bigger(a,b,c)
values = {a: a, b: b, c: c}
largest_key, _ = values.max_by { |key, value| value }
"#{largest_key} is bigger"
end

工作原理如下:

  1. 从参数中构建哈希,并将其存储在values 中。例如,此哈希可以是 { a: 84, b: 42, c: 21 }
  2. 使用 Enumerable#max_by 在该散列中找到最大值方法。这将在 largest_pair 中存储 2 个项目的数组,例如 [:a, 84]。请注意我们想要的键是第一项,因此我们使用解构来提取该对的第一项并将其存储在 largest_key 中。

  3. 构造字符串并从方法中返回它。


如果您想以动态访问和迭代参数的名称和值的方式执行此操作,您可以使用此方法:

def who_is_bigger(a,b,c)
params = method(__method__).parameters
values = params.map { |_, name| [name, binding.local_variable_get(name)] }.to_h
largest_key, _ = values.max_by { |key, value| value }
"#{largest_key} is bigger"
end

但在我看来,与其他解决方案相比,这感觉有点老套且更难阅读。

关于ruby - 返回参数的名称而不是它的值 - Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61205294/

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