NoMethodError但没有'require_relative'

时间:2019-04-15 23:00:48

标签: ruby

我做了'requir_relative',但仍然收到NoMethodError。

有2个ruby文件,在“ run.rb”下,我有这个文件

class Run
  def separate(data)
    hash_block = []
    (0...data.count).each do |i|
      f = data[i].split('|')
      hash_block[i] = Hashing.new(f[0].to_i, f[1], f[2], f[3], f[4])
    end
    hash_block
  end
end

然后在主文件中,我做了这些:

require_relative 'run'

...some codes...

to_separate = IO.readlines(ARGV[0])
separated = separate(to_separate)

...some codes...

但是我仍然得到这个:

in `block in <main>': undefined method `separate' for main:Object (NoMethodError)

如果我剪切了该方法并将其粘贴到主文件中,它将按预期运行,但这是我要避免的事情。

2 个答案:

答案 0 :(得分:0)

您需要文件,但是在该文件中有一个类定义。 separate位于该类的内部(这是一个实例方法),因此您需要一个对象来调用该方法。

separated = Run.new.separate(to_separate)

答案 1 :(得分:0)

要在Run类中调用该方法,必须实例化它。因为是实例方法。调用类的方式给您错误undefined,因为它在您当前文件的范围内找不到它

run_instance = Run.new 
to_separate = IO.readlines(ARGV[0])
sperated = run_instance.separate(to_separate)