$:<<&引用&引用;对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