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

问题描述 投票:-1回答:2

我尝试从终端运行Ruby脚本中的代码。我跑的时候什么都没发生 ruby Main.rb

# Main.rb

module Main
    class MyClass
        def initialize
            puts "Hello World" 
        end
    end
end
ruby module instantiation object-initializers
2个回答
3
投票

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

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

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

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
© www.soinside.com 2019 - 2024. All rights reserved.