2015-11-11 33 views
0

第一篇文章,“Hello World”的红宝石需要命令不正确加载

我的工作,通过关于Ruby的琳达视频和我刚开需要在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>' 
+1

'require'。/ contact_info.rb'' - 给出'require'的相对路径只会搜索你的include目录。在这种情况下,“相对路径”是指不与'/'或'.'一起使用的路径。 –

+0

完美,谢谢。这两个都需要'./contact_info.rb'和require_relative'contact_info',因为我在目录中。 –

回答

0

假设该文件是在当前目录中,在命令行中输入:

irb -r './contact_info.rb' 
+0

明白了,谢谢! –

1

可以使用require_relative 'contact_info'

0

首先,请注意与任何require陈述,省略了文件扩展名:

require 'contact_info' 

当你require文件,红宝石只查找您的计算机文件的某些目录。你可以看到哪些目录这些都是通过运行下面的代码:

p $LOAD_PATH 

In ruby 1.8.7,该$LOAD_PATH阵列包括".",或者当前目录,这意味着你的代码会工作。但是,包括在$ LOAD_PATH当前目录被认为存在安全隐患,所以现在你必须做不同的事情:

1)一种选择是使用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 

的要求语句的工作,如果你有这样的结构,工作正常。但是,如果你做什么,这一点:

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

现在,当前目录是/somerequire './contact_info'告诉红宝石在/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 

I am working through the lynda videos on Ruby and am just getting to the part of requiring content from .rb files in irb.

在我看来,它不是使用IRB的任何东西是一个好主意。更好的选择是创建一个名为1.rb,2.rb,3.rb的文件,并在这些文件中进行编码。