Ruby delegator。在类/模块外部定义的调用方法:NameError

Ruby delegator。在类/模块外部定义的调用方法:NameError,ruby,Ruby,我对Delegator有问题,这是内核的问题。对或内核进行响应。实例方法 def some_func puts '12' end puts ::Kernel.respond_to?(:some_func, true) #=> true ::Kernel.instance_method(:some_func) #=> `instance_method': undefined method `some_func' for module `Kernel' (NameError) 最

我对
Delegator
有问题,这是
内核的问题。对
内核进行响应。实例方法

def some_func
  puts '12'
end

puts ::Kernel.respond_to?(:some_func, true) #=> true
::Kernel.instance_method(:some_func) #=> `instance_method': undefined method `some_func' for module `Kernel' (NameError)
最初在该场景中发现:

def some_func
  puts '12'
end

class Klass < Delegator
  def initialize(obj)
    @obj = obj
  end

  def __getobj__
    @obj
  end

  def func
    some_func #=> `instance_method': undefined method `some_func' for module `Kernel' (NameError)
  end
end

Klass.new(0).func
def一些函数
把‘12’
结束
类Klass<委托人
def初始化(obj)
@obj=obj
结束
def__getobj__
@obj
结束
def func
some_func#=>`instance_method':模块'Kernel'的未定义方法'some_func'(NameError)
结束
结束
Klass.new(0.func)
我猜
Kernel.response\u to?(:some\u func)
是正确的,因为我们确实可以在
Kernel
上调用它。而
instance\u方法
尝试采用在
内核
本身上定义的方法(本例中不是这样)

但是我想知道为什么
Delegator
使用
Kernel.response\u to?
检查methid是否存在,并使用
Kernel.instance\u方法调用它?()

-=更新=-
我在Ruby bugtracker中创建了一个问题,您检查的位置不对。当您定义这样的方法时,它不会显示在
实例\u方法
下,您不是在处理内核实例,因为它是一个模块,而是在这里:

Kernel.methods & [ :some_func ]
# => [:some_func]

就是这样。

这段代码在Ruby 2.3.0中为我生成了正确的结果。那么您复制粘贴了这段代码并运行它而没有错误?真奇怪。你用的是什么操作系统?操作系统从来都不是像这样简单代码的一个因素。您使用的是Ruby 2还是更高版本?
方法
用于获取有关特定方法的更多信息,如
Kernel.method(:some_func).source_location
,但在这种情况下也可以使用。是的,我知道它的用途。OP问为什么
Kernel.instance\u方法(:some\u func)
不起作用,你的答案解释了这一点,但我想指出,在这种情况下,与
instance\u方法
等效的方法是
method
@Jordan哦,当然!那为什么Ruby的Delegator会使用
实例\u方法
?这是一个bug还是一个特性?