1

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

4

2 回答 2

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
于 2013-05-08T21:53:43.383 回答
2

在 C 中,#include从字面上将代码按原样放入文件中。require在 Ruby 中则不同:它实际上在自己的范围内运行所需文件中的代码。这很好,否则我们可以require通过在require.

如果您想读入脚本的内容并在当前上下文中对其进行评估,有一些方法可以做到这一点:File.readeval.

于 2013-05-08T22:10:29.137 回答