Ошибка NoMethodError, но сделал ‘require_relative’

#ruby

#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)
 

Если я вырежу метод и вставлю его в основной файл, он будет работать так, как ожидалось, но это то, чего я хотел избежать.

Комментарии:

1. каково имя файла с class Run ?

Ответ №1:

Чтобы вызвать метод внутри класса Run, вы должны создать его экземпляр. Поскольку это метод экземпляра. Способ, которым вы вызываете класс, выдает ошибку undefined , потому что он не может найти его в области вашего текущего файла

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

Ответ №2:

Вам требовался файл, но в этом файле у вас есть определение класса. separate находится внутри этого класса (и это метод экземпляра), поэтому вам нужен объект для вызова метода.

 separated = Run.new.separate(to_separate)