【问题标题】:What is a better way to access instance variables of base class inside derived class?在派生类中访问基类的实例变量的更好方法是什么?
【发布时间】:2014-08-21 08:06:04
【问题描述】:

在下面的例子中,在派生类中访问基类的实例变量有什么更好的方法?

class A
   attr_accessor :var_a, :var_b
   def initialize(var_a, var_b)
     @var_a = var_a
     @var_b = var_b
   end
   def xyz
     C.new.xyz
     D.new.xyz
   end
end

class C < A
   def xyz
     puts "C xyz #{var_a} #{var_b}"
   end
end

class D < A
   def xyz
     puts "D xyz #{var_a} #{var_b}"
   end
end

a = A.new
a.xyz

【问题讨论】:

    标签: ruby oop inheritance


    【解决方案1】:

    一方面,上述方法不起作用,因为它们希望使用与基类相同数量的参数进行初始化。其次,当您调用C.new.xyzD.new.xyz 时,您正在创建新实例,因此它们不会自动访问A.new 返回的实例的var_avar_b

    为此,您必须使用a = A.new('foo', 'bar') 进行实例化,然后在A#xyz 内部,您必须使用var_avar_b 实例化它们。

    def xyz
      C.new(var_a, var_b).xyz
      D.new(var_a, var_b).xyz
    end
    

    如果您正在寻找要在所有实例之间共享的 var_avar_b,那么您正在寻找的是类变量而不是实例变量。这些前缀是@@,而不是@

    【讨论】:

      猜你喜欢
      • 2018-11-03
      • 2019-05-05
      • 2011-07-14
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2019-07-25
      • 1970-01-01
      相关资源
      最近更新 更多