如何在initialize方法之外但在类中获取@person的值?
class MainClass
def initialize(person)
@person = person
puts @person # prints David
end
puts @person # prints blank line
end
mc = MainClass.new("David")
答案 0 :(得分:4)
你不能。
以@
开头的变量是实例变量。实例变量被称为"实例"变量,因为它们属于对象aka实例。
第8行中的实例变量@person
属于对象MainClass
。第4行中的实例变量@person
属于initialize
被调用的对象,即mc
,它是 MainClass
的实例,肯定不 MainClass
本身。
这是两个完全不同的对象,mc
和MainClass
。这两个实例变量彼此无关。
即使 可以访问实例化对象的实例变量,也存在另一个问题:您可以根据需要创建MainClass
的任意数量的实例,但是类主体只执行一次,所以应该打印哪个实例的实例变量?
mc1 = MainClass.new('Harry')
mc2 = MainClass.new('Fred')
它应该打印哈利还是弗雷德?
即使有可能解决这个问题:必须在实例化之前定义类,因此必须在实例化类之前执行类主体,这意味着在第8行,有不可能是可以打印其实例变量的实例。