我正在尝试处理一个旧方法,该方法接受一个变量并返回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?
测试该方法。
respond_to?
或者您可以检查是否是if variable.respond_to?(:map)
提供了大量用于迭代的方法,包括Enumerable。
map
Enumerable的优点是它可以告诉您有关该对象的更多信息,并且您可以更加确定其map
是您期望的映射,而不仅仅是某些名称为if variable.is_a?(Enumerable)
的方法。缺点是它将丢失所有不是map
但实现了适用的map
的内容。我想不出应该发生这种情况。