小编mar*_*ido的帖子

在"class << self"定义中缺少常量和"const_missing"

在使用定义const_missing和定义中的其他类方法class << self而不是使用def self.foo语法时,我对Ruby的行为感到非常困惑.

我试图做这样的事情:

class Foo
  class << self
    def foo
      puts MISSING
    end

    def const_missing(name)
      puts "#{name} missing"
    end
  end
end

Foo.foo
Run Code Online (Sandbox Code Playgroud)

我主要使用class << self语法来定义类方法.但是,它没有按预期工作.const_missing永远不会被称为.以上结果是NameError.

定义这样的两种方法按预期工作:

def self.foo
  puts MISSING
end

def self.const_missing(name)
  puts "#{name} missing"
end
Run Code Online (Sandbox Code Playgroud)

我认为class << self语法只是定义类方法的另一种方式,但完全等同于def self.foo?我用MRI 1.8.7,1.9.2和JRuby 1.5.6测试了上述内容.显然我在这里遗漏了一些东西?

非常感谢任何提示.

谢谢,马丁

ruby jruby

8
推荐指数
1
解决办法
3717
查看次数

标签 统计

jruby ×1

ruby ×1