Ruby “;未定义的单例方法”;模块错误,尽管方法列在singleton_方法中

Ruby “;未定义的单例方法”;模块错误,尽管方法列在singleton_方法中,ruby,singleton,Ruby,Singleton,我对singleton\u方法/singleton\u方法的行为有点失望。比如说,我们有以下模块: module M extend self def m_i puts "m_i" end def m puts "include? = [#{singleton_methods.include?(:m_i)}]" puts "call = [#{singleton_method(:m_i).call}]" rescue puts $! end end

我对
singleton\u方法
/
singleton\u方法
的行为有点失望。比如说,我们有以下模块:

module M
  extend self
  def m_i 
    puts "m_i"
  end 
  def m
    puts "include? = [#{singleton_methods.include?(:m_i)}]"
    puts "call = [#{singleton_method(:m_i).call}]" rescue puts $!
  end 
end
M::M
的调用的输出将是:

# include? = [true]
# undefined singleton method `m_i' for `M'
该方法似乎列在
singleton_methods
array中(由于
extend self
指令,这很好),但不可调用,这令人沮丧。通过将方法显式定义为singleton(
self.m_i
),它变得可调用

我错过了什么


UPD方法
singleton\u方法
是在
2.1
中引入的,看起来我在实现中遇到了一个bug


UPD2作为

存档您确定错误消息是
未定义的单例方法'm_i'表示'm'
?因为我的方法是M:Module的未定义方法“singleton_method”,我使用ruby 2.0。这两个是不同的。我确信我信任复制粘贴功能<代码>ruby-2.1.2。但是它没有解释为什么
未定义
。你能给我
单例法的文档链接吗?我在这里看不到-@mudasobwa好的。。。我要试试2.1。我的错误消息是由
M.methods.include?引起的:singleton_method#=>false
这意味着
模块
没有方法
singleton_method
。但是
模块
继承自
对象
。真奇怪。