NoMethodError, но сделал 'require_relative' - PullRequest
0 голосов
/ 16 апреля 2019

Я сделал '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 голосов
/ 16 апреля 2019

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

run_instance = Run.new 
to_separate = IO.readlines(ARGV[0])
sperated = run_instance.separate(to_separate)
0 голосов
/ 16 апреля 2019

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

separated = Run.new.separate(to_separate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...