【问题标题】:Delegate to class variable委托给类变量
【发布时间】:2020-03-05 06:06:49
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: ruby delegation


    【解决方案1】:

    你可以在一个类方法中初始化@@classB,然后引用这个类方法:

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

    【讨论】:

    • 好的,所以基本上我需要一个用于变量的类级阅读器?
    • 是的,好像是这样。
    • 看起来可行。最终做了class &lt;&lt; self; attr_accessor :classB; end,所以我可以做self.classB = B.new这很好,因为这个类将被继承。
    猜你喜欢
    • 2015-07-07
    • 2011-01-16
    • 2018-05-07
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多