据我所知,没有一种轻松或易于理解的方法可以从其值中获取参数的名称。(有关如何进行此操作的一种方式,请参见答案底部。)
相反,这是我会做的方式,我认为它很好并且易读:
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
这里是工作原理:
- 使用参数构建哈希表,并将其存储在
values
中。例如,该哈希表可以是{ a: 84, b: 42, c: 21 }
。
使用 Enumerable#max_by
方法在哈希表中查找最大值。这将在largest_pair
中存储两个项的数组,例如 [:a, 84]
。注意我们想要的密钥是第一项,因此我们使用解构提取该对的第一项并将其存储在largest_key
中。
构建字符串并从方法中返回。
如果您希望以一种动态访问和迭代参数名称和值的方式来完成此操作,您可以使用如下代码:
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
我认为这种方法有点粗糙,比另一种解决方案更难读懂。
largest_key, largest_value = values.max_by { ... }
将键和值分别赋给不同的变量。 - Stefan