Subtlety between Rails' #try & Ruby's #&.
Many would say that the safe navigation operator (
&.) in Ruby is a drop in replacment for Rails'
#try. However I came across an interesting case where they are not the same.
thing = nil thing&.something > nil
thing = nil thing.try(:something) > nil
Seems pretty much the same right?
However what happens when the object receiving the message is not nil but does not respond to the message?
thing = Thing.new thing&.something > NoMethodError: undefined method 'something' for <Thing:0x0000>
thing = Thing.new thing.try(:something) > nil
Hopefully not something you'll run into often, but definitely be aware of it. It makes the safe navigation operator not necessarily a drop in replacment.Tweet