0

我正在尝试找到一种速记方法来执行以下操作:

if row.respond_to?(:to_varbind_list)
  result << row.to_varbind_list.to_hash
else
  result << row.to_hash
end

并用这样的东西来实现它

row.try_if_respond_to(:to_varbind_list).to_hash

基本上row尝试调用自身的方法,如果该方法不存在,则返回自身。

也许通过覆盖 Object 类或类似的东西。我假设如何创建自己的非常简单。

Ruby 是否已经提供了这样的功能?

4

1 回答 1

2

不,红宝石不提供这样的东西。此外,Railstry方法不会执行您想要的操作,因为它返回 nil 或方法结果,但从不返回原始对象。

我会说这种方法会导致矛盾且相当不可读的代码,因为获取消息的对象将是矛盾的。你当然可以自己动手,但我发现你的原始代码很重要。如果要缩短代码行,请使用三元运算符:

result << (row.respond_to?(:to_varbind_list) ? row.to_varbind_list : row).to_hash
于 2013-05-14T09:58:54.747 回答