Issue #13781 has been updated by shevegen (Robert A. Heiler). > is there an actual use case? I very much doubt there is one This is what some filed issues appear to be - a mostly theoretical view that does not appear to be likely to emerge. When Hiroshi filed the request, I do not think that he had any "proxy" object in mind - it was simply to avoid compound methods check e. g: > if u && u.profile && u.profile.thumbnails && u.profiles.thumbnails.large versus Activerecord > if u.try!(:profile).try!(:thumbnails).try!(:large) To be honest, I actually find the .try! variant more readable than the &. variant but this is not the topic of course (not sure why activerecord uses the '!' there, it also makes the chain ugly, in my opinion; perhaps I am way too picky). https://bugs.ruby-lang.org/issues/11537 ---------------------------------------- Bug #13781: Should the safe navigation operator invoke `nil?` https://bugs.ruby-lang.org/issues/13781#change-66027 * Author: ioquatix (Samuel Williams) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: 2.4.1 * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- In the following example: ~~~ class Later < BasicObject def initialize(&block) raise ::ArgumentError, "Block required" unless block if block.arity > 0 raise ::ArgumentError, "Cannot store a promise that requires an argument" end @block = block end def __resolve__ @result ||= @block.call end def nil? __resolve__.nil? end def respond_to?(name) __resolve__.respond_to?(name) end def method_missing(name, *args, &block) __resolve__.__send__(name, *args, &block) end end Person = Struct.new(:name, :age) person = Later.new do nil # Person.new("Froob", 200) end puts person.nil? puts person&.name ~~~ The code fails because person is a proxy object. If safe navigation operator invoked `nil?` it should work. But, it's not clear exactly how the implementation should behave, or whether it's possible to implement this style of proxy. -- 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>