方法中更改的实例变量的种类

时间:2020-03-11 11:07:40

标签: ruby variables

class Appthin
    @fileDir = ["a","b"]
    puts @fileDir.class
    def findclass
        puts @fileDir.class
        checkFiles(@fileDir)
    end
end

输入

Array
NilClass

为什么它们不同,这让我感到困惑。

1 个答案:

答案 0 :(得分:4)

这是因为以@符号开头的变量是实例变量,但是当您第一次调用它时,没有初始化Appthin的实例。

当您引用实例变量时,它将选择self并为其设置实例变量。

如果您要从类的主体 调用实例变量,则self是类本身,它是Class的实例,而不是Appthin的实例。


问题的解决方案取决于您要执行的操作:

如果要在类主体中设置一个变量,该变量可供该类的所有实例访问,则可以使用常量。

class Appthin

  FILE_DIR = ['a', 'b']

  def find_class
    puts FILE_DIR
  end

end

如果您要设置属于Appthin特定实例的变量,然后可以对其进行更改,请在initialize方法中进行设置:

class Appthin

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

  def find_class
    puts @file_dir
  end

end
相关问题