【问题标题】:What does it mean to require files?要求文件是什么意思?
【发布时间】:2016-09-17 03:18:37
【问题描述】:

我试图弄清楚需要文件的含义,如何需要文件/宝石/等。我试图在 IRB 中加载一个文件,并得到了这段代码(一个骰子生成器):

LoadError: cannot load such file -- .d6.rb
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from (irb):14
from C:/Ruby22-x64/bin/irb:11:in `<main>'
  • 这段代码是什么意思?
  • 如何协助在 IRB 中加载文件?
  • 需要文件是什么意思?

我假设“需要”一词的意思是“加载”,但我不知道机制是什么或文件的实际位置。

该文件位于我的 Ruby Projects 文件夹中的硬盘驱动器上:

C:\Ruby\d6\d6.rb

我发布的是“irb(main):013:0> require './d6.rb'”我不熟悉 require_relative 命令(再次强调,对于 Ruby 来说非常新!)。我会发布文件的内容,但我一直在继续处理它,我没想过要保存我当时尝试加载的内容的备份副本。我想我不应该包含 .rb 扩展名? Ruby 自己加载它?

另外,我想一个附带问题是:在查看 C:/Ruby22-x64/lib/ruby/2.2.0/ 之后,我没有“rubygems”文件夹或文件路径中列出的其余部分错误信息。我假设这是一件坏事?

【问题讨论】:

  • 你能发布你的文件内容吗?
  • 看起来你是require ".d6",而你的意思是require "./d6"
  • @Jordan 或者可能是 require '.d6.rb' 而不是 require './d6'require_relative 'd6'

标签: ruby rubygems require


【解决方案1】:

a)这段代码的含义,

如果你的意思是“这个错误代码”,它抱怨找不到d6.rb文件,大概是在你找到require 'd6'之后。

b)如何协助加载 IRB 中的文件?,

不知道这是什么意思。

c) 要求文件是什么意思?我认为术语“要求”本质上只是意味着“加载”,但我不知道机制是什么或文件的实际位置

基本上,是的,加载 - 但只有一次。如果某个文件已被要求,则您不能再次要求该文件(或者更准确地说,您可以但不会发生任何事情,并且您会从 require 获得 false 而不是 true)。

至于它们从哪里加载,当你require 时Ruby 搜索的目录列表在$LOAD_PATH 中。当您执行require 'd6' 时,只会搜索那些目录。当您require './d6 时,它将从当前目录加载。当你require_relative 'd6'时,它将从当前文件所在的目录加载。

编辑:感谢 Jörg W Mittag 的更正。

【讨论】:

  • "当您执行require_relative 'd6'require './d6 时,将从当前目录加载。" – 不。当您执行require_relative 'd6' 时,它将从包含对require_relative 的调用的文件所在的目录加载,不是当前目录。这就是require_relative全部意义require './d6 从当前目录加载文件……这完全在用户的控制之下,所以作为程序员的你无法知道在哪里该目录是和 what 文件将被加载,这正是 . 被删除的原因
  • …来自 Ruby 1.9.2 中引入的 $LOAD_PATHrequire_relative
  • 只是出于好奇,$LOAD_PATH 位于哪里?还是取决于电脑?
【解决方案2】:

我假设“需要”一词的意思是“加载”,但我不知道机制是什么或文件的实际位置。

require 使 ruby​​ 解析器读取并执行文件。通常,这用于加载其他模块和类,然后可用于扩展您的应用程序代码功能。

请参阅Kernel#require 以获取有关负载机制的更多信息。另见Kernel#require_relative

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多