Делегировать в переменную класса - PullRequest
0 голосов
/ 08 ноября 2019

Я использую 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', :method_name, :a_method_name
end

1 Ответ

1 голос
/ 08 ноября 2019

Вы можете инициализировать @@classB внутри метода класса и затем обращаться к этому методу класса:

class A
  extend Forwardable

  def self.b
    @@classB ||= B.new
  end
  def_delegator 'self.class.b', :method_name, :a_method_name
end
...