如何使用ruby中的外部文件代码执行本地函数?

可以要求执行本地定义的function吗? 我想描述我需要的最简单的方法就是展示一个例子。

我正在使用ruby 1.9.3,但也欢迎1.8和2.0的解决方案。

我有一个文件main.rb如下:

class Stuff def self.do_stuff(x) puts x end require_relative('./custom.rb') do_stuff("y") end 

并且在同一文件夹中还有一个custom.rb文件,其中包含以下内容:

 do_stuff("x") 

运行main.rb,我有以下输出:

 /home/fotanus/custom.rb:1:in `': undefined method `do_stuff' for main:Object (NoMethodError) from main.rb:5:in `require_relative' from main.rb:5:in `' from main.rb:1:in `' 

请注意,如果没有require ,则输出为y

我不确定它是否是最佳解决方案,但使用eval应该可以解决问题。

 class Stuff def self.do_stuff(x) puts x end eval(File.read('./custom.rb')) do_stuff("y") end 

输出将是:

 pigueiras@pigueiras$ ruby stuff.rb x y 

在C中, #include实际上将代码按原样放入文件中。 Ruby中的require是不同的:它实际上在自己的范围内运行所需文件中的代码。 这很好,因为否则我们可以通过在require之前重新定义东西来破坏require d代码。

如果要读入脚本的内容并在当前上下文中对其进行评估,可以使用以下方法: File.readeval