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