Issue #12412 has been updated by Matthew Kerwin.


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

Making it shorthand for `respond_to?` isn't an extension, it changes the operator. What would this do under your proposal?

~~~ruby
nil&.nil?
~~~

Also your "would become" isn't quite the same if `bar.qux` returns `nil` or `false`.

----------------------------------------
Bug #12412: Extend safe navigation operator
https://bugs.ruby-lang.org/issues/12412#change-58800

* Author: Daniel Ferreira
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
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
~~~



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>