需要文件而不执行代码?

这里我有两个文件:

file.rb

def method puts "This won't be outputted." end puts "This will be outputted." 

main.rb的

 require "./file" 

当运行main.rb时,它将加载file.rb中的所有代码,这样我就会得到“这将被输出”。 屏幕上。

是否可以加载文件而无需运行代码?

因为我想加载所有方法(在模块和类中),而不必在这些范围之外执行代码。

是否可以加载文件而无需运行代码?

不,ruby文件中的所有内容都是可执行代码,包括类和方法定义(例如,当你尝试在if语句中定义一个方法时,可以看到这个,这很好用)。 因此,如果您不在文件中执行任何操作,则不会定义任何内容。

但是,您可以告诉ruby某些代码只有在文件直接运行时才会执行 – 而不是在需要时运行。 为此,只需将代码置于if __FILE__ == $0块中。 所以对于你的例子,这将工作:

file.rb

 def method puts "This won't be outputted." end if __FILE__ == $0 puts "This will not be outputted." end 

main.rb的

 require "./file" 

if __FILE__ == $0很好,但是更符合ruby的面向对象方法的方法是将所有想要访问的方法放在一个类中(作为类方法),然后从main.rb中调用它们。

例如

file.rb

 class MyUtils def self.method puts "this won't be outputted" end end 

然后在main.rb中

 require "/.file.rb" 

当你想使用你的实用方法时:

 MyUtils.method 

我不认为修改文件是个好主意 – 可能有很多像这样的文件或这些文件属于客户和其他许多原因。

Ruby擅长元编程,为什么不使用这个function呢?

它可能是这样的。

使用假模块创建文件并将文件放在此处。

 File.open("mfile.rb","w") do |f| f.write "module FakeModule " f.write File.open("file.rb").read f.write " end" end 

然后加载此文件:

 require "/.mfile.rb 

并访问该方法:

 FakeModule::method