当我在终端中执行模块时为什么没有发生?

时间:2015-10-03 10:31:40

标签: ruby module instantiation object-initializers

我尝试从终端运行Ruby脚本中的代码。我跑的时候没有任何事情发生 ruby Main.rb

# Main.rb

module Main
    class MyClass
        def initialize
            puts "Hello World" 
        end
    end
end

2 个答案:

答案 0 :(得分:2)

您需要首先实例化您的类,因为在您调用MyClass #new之前,您的puts命令将不会执行。例如:

module Main
  class MyClass
    def initialize
      puts "Hello World" 
    end
  end
end

Main::MyClass.new
Hello World
=> #<Main::MyClass:0x007f9d92144308>

答案 1 :(得分:1)

因为它正在加载模块,然后无法使用它。它永远不会被实例化(初始化),只能被定义。

您可以像这样定义模块:

module Main
  class MyClass
    def initialize
      puts "Hello World" 
    end
  end
end

然后通过创建一个新的MyClass对象来初始化它。 (在同一文件的末尾)

test = Main::MyClass.new
Hello World  
=> #<Main::MyClass:0x2979b88>

你可以通过直接运行文件而不是从另一个ruby文件加载文件时更好地处理这个问题。

if __FILE__ == $0
  test = Main::MyClass.new
  puts test
end

这样,您可以在代码直接运行时执行任何操作,例如,测试,但只是每隔一段时间静默加载模块。

直接运行文件时,它将如上所述,但在IRB中运行时,您将只看到以下内容:

=> nil