委托给类变量

我正在使用Ruby 2.6.5,并尝试使用def_delegator委托给一个类变量。

class A
  extend Forwardable

  @@classB = B.new
  def_delegator :@@classB,:method_name,:a_method_name
end

那是当我尝试做A.new.a_method_name时会收到NameError (uninitialized class variable @@classB in Object)。不知道我是打错了对def_delegator的呼叫还是只需要分解并使用activeSupport的delegate

更新

基于可接受的答案,我的班级定义如下:

class A
  extend Forwardable

  class << self
    attr_accessor :classB
  end
  self.classB = B.new

  def_delegator 'self.class.classB',:a_method_name
end
baoyixinger 回答:委托给类变量

您可以在类方法中初始化@@classB,然后引用该类方法:

class A
  extend Forwardable

  def self.b
    @@classB ||= B.new
  end
  def_delegator 'self.class.b',:method_name,:a_method_name
end
本文链接:https://www.f2er.com/3136876.html

大家都在问