Массив не доступен из метода - PullRequest
0 голосов
/ 29 октября 2018

У меня есть код:

class Blah
  @hello = ["a", "b", "c"]
  puts @hello[0]

  def something()
    puts "abc"
    #puts @hello[0]
  end
end

z = Blah.new()
z.something()

puts @hello[0]

В результате получается:

a
abc

Если я раскомментирую

#puts @hello[0]

и попробуйте вывести первый результат из массива @hello, который равен a, я получаю эту ошибку:

array_2.rb:13:in `something': undefined method `[]' for nil:NilClass (NoMethodError)

Почему я не могу получить результат:

a
abc
a

Почему мой код не работает? Массив, такой как @example, должен быть доступен не только в классе, но и в методе something. Почему я не могу получить доступ к @hello[0] внутри методов? Почему @hello[0] доступен только в классе, а не в методе? Нужен кто-то, чтобы исправить мой код, чтобы я мог получить доступ к @array в методе.

1 Ответ

0 голосов
/ 29 октября 2018

Вам необходимо инициализировать переменную экземпляра в методах экземпляра, но вы делаете это в области видимости тела класса, что не сработает.

Если вы установите @hello из метода initialize, он должен работать так, как вы ожидаете.

class Blah
  def initialize
    @hello = ["a","b","c"]
  end

  def something()
    puts @hello[0]
  end
end

Blah.new.something #=> 'a'

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

...