Ruby如何获取initialize方法之外但在类中的变量值?

时间:2016-08-07 21:12:23

标签: ruby

如何在initialize方法之外但在类中获取@person的值?

class MainClass
  def initialize(person)
    @person = person
    puts @person # prints David
  end

  puts @person # prints blank line
end

mc = MainClass.new("David")

1 个答案:

答案 0 :(得分:4)

你不能。

@开头的变量是实例变量。实例变量被称为"实例"变量,因为它们属于对象aka实例。

第8行中的实例变量@person属于对象MainClass。第4行中的实例变量@person属于initialize被调用的对象,即mc,它是 MainClass实例,肯定 MainClass本身。

这是两个完全不同的对象,mcMainClass。这两个实例变量彼此无关。

即使 可以访问实例化对象的实例变量,也存在另一个问题:您可以根据需要创建MainClass的任意数量的实例,但是类主体只执行一次,所以应该打印哪个实例的实例变量?

mc1 = MainClass.new('Harry')
mc2 = MainClass.new('Fred')

它应该打印哈利还是弗雷德?

即使有可能解决这个问题:必须在实例化之前定义类,因此必须在实例化类之前执行类主体,这意味着在第8行,有不可能是可以打印其实例变量的实例。