$:<<&引用&引用;对Ruby';需要路径吗?
我不理解$:<<&引用&引用;对Ruby';需要路径吗?,ruby,require,Ruby,Require,我不理解$:的含义,因为版本1.9,Ruby没有在当前工作目录AKA中查找所需的文件。$LOAD\u PATH或$:全局变量是一个路径数组,Ruby在其中查找您所需的文件 通过添加$: $:是一个变量,该变量包含构成Ruby加载路径的路径数组 在您的示例中,您将工作目录(“)添加到ruby加载路径($:) Ruby 1.9中的工作目录(“”)已从加载路径(全局变量$:或$-I或$load\u path)中删除,因为它被认为存在安全风险: 您的工作目录可以是任何文件夹,如果这些文件具有适当的名称
$:的含义,因为版本1.9,Ruby没有在当前工作目录AKA
中查找所需的文件。$LOAD\u PATH
或$:
全局变量是一个路径数组,Ruby在其中查找您所需的文件
通过添加$:
$:
是一个变量,该变量包含构成Ruby加载路径的路径数组
在您的示例中,您将工作目录(“
)添加到ruby加载路径($:
)
Ruby 1.9中的工作目录(“
”)已从加载路径(全局变量$:
或$-I
或$load\u path
)中删除,因为它被认为存在安全风险:
- 您的工作目录可以是任何文件夹,如果这些文件具有适当的名称,脚本将需要该文件夹中的文件。例如,Project1文件夹main.rb和init.rb中有2个文件:
==Project1/main1.rb:
$:理解Ruby为什么不再在搜索路径中包含“
”是很重要的。有人能够将具有所需文件名的文件放入您的“
”目录中,可能会对应用程序进行攻击。1.9之前的行为将加载该文件,覆盖所需文件的行为,并在应用程序所有者的权限下运行。这可能是灾难性的。默认的require
行为已更改,但添加了require\u relative
以允许您从相对于脚本的目录中加载。我从不使用$:请注意,如果该行的目标是允许您自己需要与当前脚本位于同一目录中的文件,那么这并不是您想要的:除非脚本位于当前工作目录中,否则它将无法正常工作。要将脚本的目录添加到加载路径,请使用$:.unshift File.dirname(\uuuu File\uuuu)
(我使用unshift
将目录添加到列表的前面,以便它优先于可能存在的任何其他加载路径。)
1 2 3
| | |
V V V
$: << "."
ruby-1.9.2-p290 :002 > puts File.expand_path('.')
=> /home/alex/Projects
ruby-1.9.2-p290 :003 > Dir.chdir('..')
ruby-1.9.2-p290 :004 > puts File.expand_path('.')
=> /home/alex