【发布时间】:2021-01-22 17:12:51
【问题描述】:
是否有一些隐藏的 Ruby/Rails-magic 仅在方法存在时才调用它?
假设我想打电话
resource.phone_number
但我事先不知道资源是否响应phone_number。一种方法是
resource.phone_number if resource.respond_to? :phone_number
如果用在错误的地方,那就不是那么漂亮了。我很好奇是否存在更符合try 使用方式的东西(resource.try(:phone_number))。
【问题讨论】:
-
作为一个极端的例子,我建议在这种情况下覆盖
Object的method_missing以返回nil。这是调试的恐怖。有些人会认为它是糟糕的风格、元数据和不必要的。 -
@User bah,一点也不可怕。您只需将堆栈重新返回到抛出 nil 异常的位置:-)
-
使用
respond_to是最好的选择 -
随意添加它作为单独的答案,我会给你一个接受。
-
@Frans 你介意接受投票最多的答案,这样我就可以删除我不正确的答案吗?
标签: ruby-on-rails ruby