如何检查一个变量在 rails 中是否有可用的地图?换句话说,如果变量是可映射的?

How to check if a variable has a map available in rails? In other words, if a variable is mappable?

我正在尝试处理接受变量和 returns variable.amount.to_s 的遗留方法。但是现在有了一些变化,变量也可以是活动记录关系。

我基本上希望能够做这样的事情:

def method(variable)
  if variable has map?
    variable.map { |v| v.amount.to_f }.reduce(:+)
    variable.to_s
  else
    variable.amount.to_s
  end
end

但我无法弄清楚 if 条件应该是什么?

您可以直接用respond_to?测试该方法。

if variable.respond_to?(:map)

或者您可以检查它是 Enumerable which provides a large suite of methods used for iteration, including map

if variable.is_a?(Enumerable)

Enumerable 的优点是它告诉你更多关于对象的信息,你可以更确定它的 map 是你期望的映射,而不仅仅是一些恰好被命名为 [=13= 的方法].缺点是它会遗漏任何不是 Enumerable 但确实实现了适用的 map 的东西;我想不出应该发生的情况。