我需要一个包含类的文件,但从未为必需的类创建对象。但是,当我运行' main.rb'文件所需的类已启动。为什么?
main.rb的
require "./required_class.rb"
puts "This should be listed first"
required_class.rb
class Hello_World
puts "Hello World"
end
答案 0 :(得分:3)
在ruby类中,行为不像函数,它们在执行时进行评估。因为这个事实,你的课程实际上与简单无异:
puts "Hello World"
您所看到的是预期的,如果您只是在IRB中运行:
> class Hello_World
> puts "Hello World"
> end
"Hello World"
=> nil
要在require
包含它的文件时阻止它运行,你需要创建一个构造函数,如下所示:
class Hello_World
def initialize
puts "Hello World"
end
end
现在,在运行Hello_World.new
之前,您将看不到任何输出
如果您希望能够在不实例化的情况下打印消息,可以使用:
class Hello_World
@@hello = "Hello World"
end
然后您可以使用puts Hello_World.hello
答案 1 :(得分:2)
因为在需要时会对类的主体进行求值。通常,您会看到类定义返回nil
,因为类中的最后一件事是方法定义(从2.1开始def
返回方法的名称作为符号)。