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
。但是模块
继承自对象
。真奇怪。