如何使用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.read
和eval
。