首先,请注意与任何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
现在,当前目录是/some
和require './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的文件,并在这些文件中进行编码。
'require'。/ contact_info.rb'' - 给出'require'的相对路径只会搜索你的include目录。在这种情况下,“相对路径”是指不与'/'或'.'一起使用的路径。 –
完美,谢谢。这两个都需要'./contact_info.rb'和require_relative'contact_info',因为我在目录中。 –