这里我将实例变量声明为全局变量。在输入语句中,我没有得到输出"home/abc.txt"
。访问实例变量输入的语法是什么?
class AbcController
@filename = 'home/abc.txt'
def querypass
puts @filename
end
...
end
答案 0 :(得分:2)
当这样声明时,@filename
asssignment在类的上下文中运行,并且被称为类实例变量。 querypass
方法在类实例上定义,无法访问它。您可能想要做的是:
class AbcController
def initialize
@filename = 'home/abc.txt'
end
def querypass
puts @filename
end
...
end
在这种情况下,每个实例都有自己的变量副本,每个实例都以相同的初始值开头。但是,如果您真的想要为整个班级设置一个变量,您可以这样做:
class AbcController
class << self
attr_accessor :filename # or attr_reader
end
@filename = 'home/abc.txt'
def querypass
puts self.class.filename
end
...
end
或者,如果您不想创建任何类设置器或阅读器:
class AbcController
@filename = 'home/abc.txt'
def querypass
puts self.class.instance_variable_get(:@filename)
end
...
end