假设我有以下两个文件:
app.rb
class App
def a
"a"
end
require_relative 'b'
end
b.rb
class App
def b
"b"
end
end
App
中的app.rb
App
被b.rb
中的{{1}}成功延长,但我不明白为什么。为什么这样做?
答案 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