"模块self :: X"之间的区别是什么?和"模块X"?

时间:2016-08-25 16:55:12

标签: ruby

怎么样

module self::GenName

与简单

不同

module GenName

请注意,此模块嵌套在另一个模块中。

1 个答案:

答案 0 :(得分: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]

这表明Ruby在两种情况下都以相同的方式引用GenName。我确信如果添加self.没有区别,但我也认为上述内容不足以证明。