@Hauleth 的回答是正确的:main
Ruby 中没有方法或结构。我只想在这里提供一个稍微不同的观点以及一些解释。
当您执行时ruby somefile.rb
,Ruby 会执行somefile.rb
. 因此,如果您有一个非常小的项目并希望它独立于单个文件中,那么执行以下操作绝对没有错:
# somefile.rb
class MyClass
def say_hello
puts "Hello World"
end
end
def another_hello
puts "Hello World (from a method)"
end
c = MyClass.new
c.say_hello
another_hello
并不是前两个块没有执行,只是在实际使用相应的类/方法之前,您看不到效果。
该if __FILE__ == $0
位只是一种阻止您只想在此文件直接从命令行运行时运行的代码的方法。 __FILE__
是当前文件的名称,$0
是由 shell 执行的命令(尽管它足够聪明,可以删除ruby
),因此比较两者可以准确地告诉您:这是从命令行执行的文件吗?这有时是由想要在文件中定义类/模块并提供使用它的命令行实用程序的编码人员完成的。恕我直言,这不是很好的项目结构,但就像任何用例一样,这样做非常有意义。
如果您希望能够直接执行您的代码,您可以添加一个shebang行
#!/usr/bin/env ruby
# rest of somefile.rb
并使其可执行chmod +x somefile.rb
(可选地在不带 .rb 扩展名的情况下重命名)。这并没有真正改变你的情况。仍然有效,if __FILE__ == $0
但可能仍然没有必要。
编辑
正如@steenslag 正确指出的那样,Ruby 中的顶级范围是被Object
调用的main
. 不过,它的行为有点古怪:
irb
>> self
=> main
>> self.class
=> Object
>> main
NameError: undefined local variable or method `main' for main:Object
from (irb):8
在您开始更深入地研究该语言之前,请不要担心这一点。如果您确实想了解更多关于这类东西的信息,Metaprogramming Ruby是一本不错的读物:)