【问题标题】:ruby require command not loading correctlyruby require 命令未正确加载
【发布时间】:2015-11-11 12:28:35
【问题描述】:

第一篇文章“Hello World”

我正在浏览有关 Ruby 的 lynda 视频,并且刚刚开始需要 irb 中的 .rb 文件中的内容。我们制作的一个示例补丁名为contact_info.rb,我试图从irb 获取该文件。执行后,它会返回下面的附件。

一些简单的谷歌搜索使它看起来可能是一个优胜美地问题(运行 10.10.3。),但我不确定如何排除故障。

谢谢大家

irb(main):006:0> require contact_info.rb
LoadError: cannot load such file -- contact_info.rb
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in 'require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in 'require'
    from (irb):6
    from /usr/bin/irb:12:in '<main>'

【问题讨论】:

  • require './contact_info.rb' -- 给出require 的相对路径只会搜索您的包含目录。在这种情况下,“相对路径”是指不属于 /. 的路径。
  • 完美,谢谢。自从我在目录中以来,两者 require './contact_info.rb' 和 require_relative 'contact_info' 都有效。

标签: ruby osx-yosemite


【解决方案1】:

你可以使用require_relative 'contact_info'

【讨论】:

    【解决方案2】:

    假设文件在您的当前目录中,请在命令行中输入:

    irb -r './contact_info.rb'
    

    【讨论】:

      【解决方案3】:

      首先,请注意,对于任何 require 语句,您都省略了文件扩展名:

      require 'contact_info'
      

      当您require 一个文件时,ruby 只会在您计算机上的某些目录中查找该文件。您可以通过运行以下代码来查看这些目录:

      p $LOAD_PATH
      

      In ruby 1.8.7$LOAD_PATH 数组包括".",或当前目录,这意味着您的代码可以工作。但是,在 $LOAD_PATH 中包含当前目录被认为存在安全风险,所以现在你必须做一些不同的事情:

      1) 一种选择是对您在 require 语句中指定的文件使用 relative path

      require './contact_info'
      

      路径相对于current directory。如果你有这样的结构,那效果很好:

      /some/dir/
          your_prog.rb
          contact_info.rb
      

      并且你将目录切换到/some/dir,然后运行your_prog.rb

      ~$ cd /some/dir
      /some/dir$ ruby my_prog.rb
      

      require 语句有效——没有问题。但是,如果您这样做会怎样:

      /some/dir$ cd ..
      /some$ ruby ./dir/your_prog.rb
      

      现在,当前目录是/somerequire './contact_info' 告诉 ruby​​ 在/some 目录中查找contact_info.rb——但它不存在,所以你会得到错误:

      `require': cannot load such file -- ./contact_info.rb (LoadError)
      

      2) 为了解决这个问题,ruby 添加了require_relative。使用require_relative 指定的路径是相对于包含require_relative 语句的文件 的位置。因此,声明:

      #your_prog.rb:
      require_relative './contact_info'
      

      ...将在包含your_prog.rb 的目录中查找文件contact_info.rb。现在,这样做:

      /some$ ruby ./dir/your_prog.rb
      

      会正常工作。事实上,在require_relative 中,您甚至不必在路径中写./

      #your_prog.rb:
      require_relative 'contact_info'  #Look for contact_info.rb in the same
                                       #directory that contains this file
      
      require_relative '../contact_info'  #Look for contact_info.rb one directory
                                          #above the directory that contains this file
      

      我正在浏览有关 Ruby 的 lynda 视频,并且刚刚开始 irb 中需要 .rb 文件内容的部分。

      在我看来,将 irb 用于任何事情都不是一个好主意。更好的选择是创建几个名为 1.rb、2.rb、3.rb 的文件,并在这些文件中进行编码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        • 2016-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-26
        相关资源
        最近更新 更多