From: ko1@... Date: 2017-06-16T07:40:05+00:00 Subject: [ruby-core:81701] [Ruby trunk Feature#13332] Forwardable#def_instance_delegator nil Issue #13332 has been updated by ko1 (Koichi Sasada). Assignee set to nobu (Nobuyoshi Nakada) ---------------------------------------- Feature #13332: Forwardable#def_instance_delegator nil https://bugs.ruby-lang.org/issues/13332#change-65391 * Author: eike.rb (Eike Dierks) * Status: Open * Priority: Normal * Assignee: nobu (Nobuyoshi Nakada) * Target version: ---------------------------------------- I'd like to suggest an extension to the signature of stdlib Forwardable#def_instance_delegator currently (ruby 2.3.3) it is declared as: ```ruby def_instance_delegator(accessor, method, ali = method) ``` I'd like to add a nil: option like this: ```ruby def_instance_delegator(accessor, method, ali = method, nil_behaviour:NoMethodError) ``` Rationale: As of ruby2.3, delegated methods fail with `#` when the declared accessor returns nil aka, when the delegator may be nil, the Forwardable module can not be used, but one has to ressort to implement the forward manually. Adding an option to the signature could solve this. I believe that this can be implemented in a fully backward compatible way. I named this option :nil in my example, (some people will cry out loud) Specification scribble: ~~~ruby if accessor.nil? case nil_behaviour when nil then nil # return nil, when accessor was nil when Error # raise that Error with proper args when Proc # invoke that Proc with proper args when String # return that string else # return that object end ~~~ -- https://bugs.ruby-lang.org/ Unsubscribe: