2016-08-25 35 views

回答

1

由于

module M1 
    puts "self = #{self}" 
    module self::GenName 
    puts Module.nesting 
    def self.gen_name 
    end 
    end 
end 
    # self = M1 
    # M1::GenName 
    # M1 

我们看到M1相同

module M1 
    module M1::GenName 
    puts Module.nesting 
    def self.gen_name 
    end 
    end 
end 
    # M1::GenName 
    # M1 

应该不会感到惊讶。 GenName被引用(举例来说)

M1::GenName.methods(false) 
    #=> [:gen_name] 
在这两种情况下

。如果我们不是写

module M2 
    module GenName 
    puts Module.nesting 
    def self.gen_name 
    end 
    end 
end 
    # M2::GenName 
    # M2 

然后

M2::GenName.methods(false) 
    #=> [:gen_name] 

这表明红宝石引用GenName在这两种情况下相同的方式。我相信如果加入self.没有什么区别,但我也认为上述内容缺乏证据。

+0

这是真的。添加self ::'几乎总是毫无意义的,而且它严格要求的场合如此晦涩难懂,我不确定我能想到它。 – tadman

相关问题