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

Ruby 如果对象存在,则对对象调用方法,ruby,Ruby,有没有更优雅的写作方式 @on_connection_callback.call() if @on_connection_callback 它必须引用@on\u connection\u回调两次,这让我很恼火。你可以这样写 @on_connection_callback.call() rescue nil 我喜欢这样的东西,它允许: @on_connection_callback.andand.call() 还有其他选项,如各种try实现 @on_connection_callback.i

有没有更优雅的写作方式

@on_connection_callback.call() if @on_connection_callback
它必须引用@on\u connection\u回调两次,这让我很恼火。

你可以这样写

@on_connection_callback.call() rescue nil
我喜欢这样的东西,它允许:

@on_connection_callback.andand.call()
还有其他选项,如各种
try
实现

@on_connection_callback.instance_eval{call if self}

这很好,实际上是最快的测试方法。我最近在这里做了一个测试,证明上述速度略快于:

@on_connection_callback && @on_connection_callback.call()
用这个小方法:


这样盲目的救援会造成很难发现的问题。
@on_connection_callback.call() if @on_connection_callback
@on_connection_callback && @on_connection_callback.call()
tryit { @on_connection_callback.call() }