require可以执行本地定义的函数吗?我想描述我需要的最简单的方法就是展示一个例子。
我正在使用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 `<top (required)>': undefined method `do_stuff' for main:Object (NoMethodError)
from main.rb:5:in `require_relative'
from main.rb:5:in `<class:Stuff>'
from main.rb:1:in `<main>'
请注意,如果没有require
,则输出为y
。
答案 0 :(得分:4)
我不确定它是否是最佳解决方案,但使用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
答案 1 :(得分:2)
在C中,#include
将代码按原样丢弃到文件中。 Ruby中的require
是不同的:它实际上在自己的范围内运行所需文件中的代码。这很好,因为否则我们可以通过在require
之前重新定义内容来中断require
代码。
如果您想要阅读脚本的内容并在当前上下文中对其进行评估,可以采用以下方法:File.read
和eval
。