Actions
Feature #12113
openGlobal method inside Delegator causes NameError
Feature #12113:
Global method inside Delegator causes NameError
Status:
Open
Assignee:
-
Target version:
-
Description
def some_func
puts '12'
end
class Klass < Delegator
def initialize(obj)
@obj = obj
end
def __getobj__
@obj
end
def func
some_func #=> /home/oleg/.rbenv/versions/2.3.0/lib64/ruby/2.3.0/delegate.rb:85:in `instance_method': undefined method `some_func' for module `Kernel' (NameError)
end
end
Klass.new(0).func
Delegator uses Kernel.instance_method (https://github.com/ruby/ruby/blob/trunk/lib/delegate.rb#L85) but:
::Kernel.respond_to?(:some_func, true) #=> true
::Kernel.instance_method(:some_func) #=> `instance_method': undefined method `some_func' for module `Kernel' (NameError)
::Kernel.method(:some_func) #=> #<Method: Module(Object)#some_func>
I think there should be Kernel.method
instead of instance_method
(in Delegator). Otherwise you get respond_to?
== true
, but cannot use this method and get an error.
Actions