Project

General

Profile

Bug #12412

Updated by dsferreira (Daniel Ferreira) almost 8 years ago

I wonder if we couldn't extend the safe navigation operator to work with any object rather than just nil. 

 I tend to still use this kind of code in some scenarios, specially when I work with objects with dynamic interfaces or arguments with different possible object types: 

 ~~~ ruby 
 class Foo 
    def bar(baz) 
        if baz.respond_to?(:qux) 
           return baz.qux 
        end 
        'whatever' 
    end 
 end 
 ~~~ 

 What if we extend the safe navigation operator to work with any kind of object? 
 If it doesn't respond to the method it would return nil like this: 

 ~~~ ruby 
 class Foo 
   def bar(baz) 
     baz&.qux || 'whatever' 
   end 
 end 
 ~~~ 

 In order to not break backwards compatibility we should keep the current behaviour as well so the rational would be: 

 ~~~ ruby 
 nil&.any_method 
 # => nil 

 foo&.non_responding_method 
 # => nil 
 ~~~ 

Back