使两个Ruby类在同一目录中相互通信

时间:2014-03-19 23:51:08

标签: ruby include require

我在同一目录中有两个.rb文件

samplecode.rb
otherclass.rb

这是SampleCode的内容

require 'otherclass'
include OtherClass

class SampleCode
  #...
end

这是OtherClass的内容

require 'samplecode'

class OtherClass
  #...
end

当我运行“ruby otherclass.rb”时,我收到以下错误:

enter image description here

我无法弄清楚出了什么问题,因为这两个文件肯定在同一个目录中。是什么给了什么?

3 个答案:

答案 0 :(得分:2)

尝试:

require './otherclass'

require './samplecode'

require应处理循环引用问题,但您当前的目录可能不在您的路径中。

答案 1 :(得分:2)

require方法搜索Ruby的$LOAD_PATH中的文件,出于安全原因,这些文件不包含当前目录。因此,当您require 'sample_code'时,它会在您的系统中查找该文件而无法找到它,因为它位于您当前的目录中。

您应该将当前目录添加到搜索路径,以便Ruby找到您的脚本:

ruby -l . other_class.rb

请注意,如果您尝试从sample_code.rb所在的目录外部运行脚本,它将无效。如果当前目录中包含具有相同名称的其他文件,则将加载并执行该文件而不是脚本。这是一个可能的攻击向量,以及当前目录不在搜索路径中的原因。

答案 2 :(得分:2)

试试这个:

在加载文件时使用require_relative不存在ruby的$ LOAD_PATH

read it for more info on require and require_relative