为什么在使用 require 关键字时 Ruby 文件中需要“./”(点 + 正斜杠)?
Why is the "./" (dot + forward slash) needed in Ruby files when using the require keyword?
尝试将 Ruby 依赖文件放入 Ruby 文件时,为什么在输入文件目录时需要“./”(点 + 正斜杠)?奇怪的是,只有在使用 require
关键字而不是 load
关键字时才需要它。
即:
module.rb(依赖项)
module SomeModule
def someMethod
puts "hello"
end
end
method.rb
require "./module.rb"
#require "module.rb" does not work
class Animal
include SomeModule
end
class Person
include SomeModule
end
animal = Animal.new
animal.someMethod
person = Person.new
person.someMethod
#irb --> need to also write require " ./method.rb" to call it
如果 module.rb 和 method.rb 在同一目录中,则不应使用 require
,而应使用 require_relative
。因此,method.rb 的顶部看起来像这样
require_relative 'module'
class Animal
It is only needed when using the require keyword and not the load
keyword. Why?
load
、require
和require_relative
都是以文件名作为要加载的参数的方法。他们需要找到通过参数
传递的文件名
load
load 检查 LOAD PATH 中的文件,可以使用全局变量 $LOAD_PATH
或 $:
即使 当前工作目录 (由 . 指定)实际上不在 LOAD_PATH 中,load 方法 acts 就好像它是这样一样能够找到一个文件,而无需将当前目录显式附加到作为参数传递的文件名
require
require 与 load 相似,有两个主要区别
首先是它不知道当前工作目录。它不会 添加 它到加载路径,所以一旦 ruby 搜索它,它就找不到文件。这就是为什么你必须明确地告诉 ruby 关于 当前工作目录 以及如何使用 ./[=80= 从当前目录定位文件的原因].
如果您不想添加 ./,您必须将当前目录添加到您的加载路径
$: << '.'
require 'module.rb'
这将起作用,因为当前目录现在位于 ruby 将搜索文件的加载路径中。
第二个主要区别是,当您在一个文件中多次调用 require 并将相同的文件名作为参数传递给它时,该文件将是 required 只是第一次。 Ruby 跟踪 需要的文件 。但是,使用相同的文件名作为参数多次调用 load,文件总是 loaded.
require 'time' => true
require 'time' => false #second call within the same file
require_relative
require_relative 搜索 相对于执行方法调用的文件 ,这就是为什么你不需要通过显式添加 当前工作目录
来改变加载路径
尝试将 Ruby 依赖文件放入 Ruby 文件时,为什么在输入文件目录时需要“./”(点 + 正斜杠)?奇怪的是,只有在使用 require
关键字而不是 load
关键字时才需要它。
即: module.rb(依赖项)
module SomeModule
def someMethod
puts "hello"
end
end
method.rb
require "./module.rb"
#require "module.rb" does not work
class Animal
include SomeModule
end
class Person
include SomeModule
end
animal = Animal.new
animal.someMethod
person = Person.new
person.someMethod
#irb --> need to also write require " ./method.rb" to call it
如果 module.rb 和 method.rb 在同一目录中,则不应使用 require
,而应使用 require_relative
。因此,method.rb 的顶部看起来像这样
require_relative 'module'
class Animal
It is only needed when using the require keyword and not the load keyword. Why?
load
、require
和require_relative
都是以文件名作为要加载的参数的方法。他们需要找到通过参数
load
load 检查 LOAD PATH 中的文件,可以使用全局变量 $LOAD_PATH
或 $:
即使 当前工作目录 (由 . 指定)实际上不在 LOAD_PATH 中,load 方法 acts 就好像它是这样一样能够找到一个文件,而无需将当前目录显式附加到作为参数传递的文件名
require
require 与 load 相似,有两个主要区别
首先是它不知道当前工作目录。它不会 添加 它到加载路径,所以一旦 ruby 搜索它,它就找不到文件。这就是为什么你必须明确地告诉 ruby 关于 当前工作目录 以及如何使用 ./[=80= 从当前目录定位文件的原因].
如果您不想添加 ./,您必须将当前目录添加到您的加载路径
$: << '.'
require 'module.rb'
这将起作用,因为当前目录现在位于 ruby 将搜索文件的加载路径中。
第二个主要区别是,当您在一个文件中多次调用 require 并将相同的文件名作为参数传递给它时,该文件将是 required 只是第一次。 Ruby 跟踪 需要的文件 。但是,使用相同的文件名作为参数多次调用 load,文件总是 loaded.
require 'time' => true
require 'time' => false #second call within the same file
require_relative
require_relative 搜索 相对于执行方法调用的文件 ,这就是为什么你不需要通过显式添加 当前工作目录
来改变加载路径