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

问题描述

我正在尝试处理一个接受变量并返回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条件应该是什么?

标签: ruby-on-railsrubyruby-on-rails-5

解决方案


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

if variable.respond_to?(:map)

或者您可以检查它是否是Enumerable,它提供了大量用于迭代的方法,包括map.

if variable.is_a?(Enumerable)

Enumerable 的优点是它可以告诉您更多关于对象的信息,并且您可以更加确定它map是您期望的映射,而不仅仅是一些恰好被命名的方法map。缺点是它会错过任何不是Enumerable但确实实现了适用的东西map;我想不出应该发生这种情况的情况。


推荐阅读