ruby-on-rails - 如何检查变量是否在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
条件应该是什么?
解决方案
您可以使用 直接测试该方法respond_to?
。
if variable.respond_to?(:map)
或者您可以检查它是否是Enumerable,它提供了大量用于迭代的方法,包括map
.
if variable.is_a?(Enumerable)
Enumerable 的优点是它可以告诉您更多关于对象的信息,并且您可以更加确定它map
是您期望的映射,而不仅仅是一些恰好被命名的方法map
。缺点是它会错过任何不是Enumerable
但确实实现了适用的东西map
;我想不出应该发生这种情况的情况。
推荐阅读
- textbox - 实时日期分隔符
- swiftui - 关于从后台线程发布更改的 SwiftUI 错误
- google-drive-api - 无论如何要在不下载的情况下解压缩谷歌驱动器中的 zip 或 tar
- node.js - 为什么请求管道在此代码中包含标头?
- java - Java fizzBuzz(来自 CodingBat-Array2 的练习)
- tkinter - 如何从 Combobox 获取值以写入文本框
- php - 选择框数据数组
- javascript - 承诺即使在解决后仍处于未决状态
- python - 使用 torch.save 和 torch.load 继续培训 - 关键错误消息
- ios - 如何使用 for 循环通过 BLE 发送数据