当试图将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
答案 0 :(得分:1)
如果module.rb和method.rb在同一目录中,而不是使用require
,则应使用require_relative
。因此,method.rb的顶部看起来像这样
require_relative 'module'
class Animal
答案 1 :(得分:0)
只有在使用require关键字而不是加载时才需要它 关键词。为什么呢?
load
,require
和require_relative
都是将文件名作为要加载的参数的方法。他们需要找到传递参数的文件名
<强>负载强>
加载检查 LOAD PATH 中的文件,可以使用全局变量$LOAD_PATH
或$:
访问该文件,即使当前工作目录(由。指定)实际上不在LOAD_PATH中,加载方法行为就好像它是能够找到一个文件,而无需将当前目录显式附加到作为参数传递的文件名
<强>需要强>
需要类似于加载,主要有两个区别
首先是它不知道当前工作目录。它没有将添加到LOAD PATH中,因此一旦ruby搜索它,它就找不到该文件。这就是为什么你必须明确告诉ruby关于当前工作目录以及如何使用 ./ path_to_file 从当前目录中找到该文件。
如果您不想添加 ./ ,则必须将当前目录添加到加载路径
$: << '.'
require 'module.rb'
这将起作用,因为当前目录现在位于加载路径中,这是ruby将搜索该文件的位置。
第二个主要区别在于,当您在文件中对 require 进行多次调用时,将相同的文件名作为参数传递,该文件将仅为 required 时间。 Ruby会跟踪所需的文件。但是,如果多次调用加载并使用与参数相同的文件名,则该文件始终已加载。
require 'time' => true
require 'time' => false #second call within the same file
<强> require_relative 强>
require_relative 搜索相对于执行方法调用的文件,这就是您不需要通过显式添加来更改LOAD PATH的原因当前工作目录