为什么我可以使用require_relative多次扩展Ruby类?

时间:2014-02-25 16:38:40

标签: ruby

假设我有以下两个文件:

app.rb

class App
  def a
    "a"
  end
  require_relative 'b'
end

b.rb

class App
  def b
    "b"
  end
end
App中的app.rb Appb.rb中的{{1}}成功延长,但我不明白为什么。为什么这样做?

2 个答案:

答案 0 :(得分:7)

您的代码相当于:

class App
  def a
    "a"
  end
end

class App
  def b
    "b"
  end
end

您可能认为它等同于:

class App
  def a
    "a"
  end
  class App
    def b
      "b"
    end
  end
end

不是,因为require'd文件代码总是在全局范围内执行。

答案 1 :(得分:0)

require_relative正在将代码从b.rb提取到app.rb

Ruby是一种动态语言,允许您随意打开和关闭现有类。基本上当你运行app.rb时,它会读取方法'a'然后读取b.rb,让你可以从app.rb程序访问方法'b'。

Require_relative假定所需文件位于app.rb的根目录中。

当您可能希望将方法添加到像Array这样的以前存在的(Ruby Core)类时,这在更复杂的情况下非常有用。

阅读本书以获得更深入的理解: Metaprogramming with Ruby