如果对象存在,则调用对象上的方法

时间:2013-01-25 14:04:57

标签: ruby

有没有更优雅的写作方式?

@on_connection_callback.call() if @on_connection_callback

必须两次引用@on_connection_callback,这让我感到厌烦。

5 个答案:

答案 0 :(得分:2)

您可以将其写为

@on_connection_callback.call() rescue nil

答案 1 :(得分:2)

我喜欢"andand" gem允许的内容:

@on_connection_callback.andand.call()

还有其他选项,例如各种try实现。

答案 2 :(得分:1)

@on_connection_callback.instance_eval{call if self}

或者

->p{p.call if p}.call(@on_connection_callback)

答案 3 :(得分:1)

@on_connection_callback.call() if @on_connection_callback

很好,实际上是最快的测试方式。我最近在这里做了一个benchmark test,证明上面的内容略快于:

@on_connection_callback && @on_connection_callback.call()

答案 4 :(得分:1)

使用这个小gem

tryit { @on_connection_callback.call() }