【发布时间】:2014-07-14 06:19:22
【问题描述】:
我需要一个包含类的文件,但从未为所需的类创建对象。但是当我运行“main.rb”文件时,所需的类就会启动。为什么?
main.rb
require "./required_class.rb"
puts "This should be listed first"
required_class.rb
class Hello_World
puts "Hello World"
end
【问题讨论】:
我需要一个包含类的文件,但从未为所需的类创建对象。但是当我运行“main.rb”文件时,所需的类就会启动。为什么?
main.rb
require "./required_class.rb"
puts "This should be listed first"
required_class.rb
class Hello_World
puts "Hello World"
end
【问题讨论】:
在 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得到消息了
【讨论】:
因为类的主体会在您需要时进行评估。通常你会看到类定义返回 nil,因为类中的最后一件事是方法定义(从 2.1 开始,def 返回方法名称作为符号)。
【讨论】: