Ruby:类内部模块优先于模块?

时间:2014-12-01 06:27:52

标签: ruby

module TestModule
  NAME = "Ruby"
  def self.class_method
    puts "this is modules method"
  end
  def instances_method
    puts "this is instances methods"
  end
  class MyClass
    puts "this is class inside module"
  end
end

puts TestModule::NAME
puts TestModule.class_method
puts TestModule::MyClass

Output:
this is class inside module
Ruby
this is modules method

它应该是:     红宝石     这是模块方法     这是模块内的类

类和模块之间的ruby是否有任何优先级。因为ruby是一个解释器所以类(MyClass类)应该最后执行。

1 个答案:

答案 0 :(得分:1)

这不是关于优先级,您在课堂上puts调用超出任何方法。解释器首先读取整个文件,这就是为什么它在任何这些调用之前输出this is class inside module

puts TestModule::NAME
puts TestModule.class_method
puts TestModule::MyClass

您可以测试一下:

module TestModule
  puts 'reading module'

  class MyClass
    puts 'reading class'
  end
end

你会看到:

reading module
reading class

puts TestModule::MyClass此调用不会像您预期的那样在您的课程中输出。因此,只需将您的类包装在实例或类方法中,并相应地将其称为TestModule::MyClass.new.instance_methodTestModule::MyClass.class_method