`nil.&to_s` evaluates to false
ruby 2.3 introducted the Safe Naviation Operator &. intended to make nil checks less verbose, simulating the functionality of the Rails introduced try method.
This helps to prevent unwanted NoMethodErrors
> nil.do_something
NoMethodError (undefined method `do_something' for nil:NilClass)
> nil&.do_something
nil
What happens when you type the & on the right side of the .?
> nil.&do_something
NameError (undefined local variable or method `do_something' for main:Object)
Normally you'd get an error, because do_something isn't defined, but what if you are calling a method available on everything like to_s?
> nil.&to_s
false
This breaks expectations. This statement is equivalent to nil & to_s.
> nil & to_s
false
Ruby defines & as a method on nil.
> nil.method(:&)
#<Method: NilClass#&>
This method in the documentation is defined as:
And—Returns false. obj is always evaluated as it is the argument to a method call—there is no short-circuit evaluation in this case.
So with nil.&to_s you're calling the & operator as a method and passing the result of to_s called on the main object, but it doesn't matter because nil.& always evaluates to false.