тип переменной экземпляра изменен в методе - PullRequest
0 голосов
/ 11 марта 2020
class Appthin
    @fileDir = ["a","b"]
    puts @fileDir.class
    def findclass
        puts @fileDir.class
        checkFiles(@fileDir)
    end
end

input

Array
NilClass

почему они разные, меня это смутило.

1 Ответ

4 голосов
/ 11 марта 2020

Это потому, что переменные, начинающиеся с символа @, являются переменными экземпляра, но когда вы впервые вызываете его, экземпляр Appthin не инициализируется.

Когда вы ссылаетесь на переменную экземпляра, он выбирает self и устанавливает переменную экземпляра для этого.

Если вы вызываете переменную экземпляра из тела вашего класса , тогда self - это сам класс, который является экземпляром Class, но не экземпляром Appthin.


Решение вашей проблемы зависит от того, что вы пытаетесь сделать:

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

class Appthin

  FILE_DIR = ['a', 'b']

  def find_class
    puts FILE_DIR
  end

end

Если вы пытаетесь установить переменную, принадлежащую конкретному c экземпляру Appthin, которую затем можно изменить, установите ее в методе initialize :

class Appthin

  def initialize
    @file_dir = ['a', 'b']
  end

  def find_class
    puts @file_dir
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...