Project

General

Profile

Bug #12412

Updated by dsferreira (Daniel Ferreira) over 3 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