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

问题描述 投票:0回答:1

我正在尝试处理一个旧方法,该方法接受一个变量并返回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-rails ruby ruby-on-rails-5
1个回答
0
投票

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

respond_to?

或者您可以检查是否是if variable.respond_to?(:map) 提供了大量用于迭代的方法,包括Enumerable

map

Enumerable的优点是它可以告诉您有关该对象的更多信息,并且您可以更加确定其map是您期望的映射,而不仅仅是某些名称为if variable.is_a?(Enumerable) 的方法。缺点是它将丢失所有不是map但实现了适用的map的内容。我想不出应该发生这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.