ruby 如何从超类初始化关键字参数(对依赖注入很有用)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 如何从超类初始化关键字参数(对依赖注入很有用)相关的知识,希望对你有一定的参考价值。

# http://ruby-doc.org/core-2.4.0/doc/syntax/calling_methods_rdoc.html#label-Hash+to+Keyword+Arguments+Conversion
class Super
  attr_reader :shared

  # ServiceObject style class-level activation method
  def self.run(**args)
    new(**args).tap{ |obj| obj.run }
  end

  def initialize(shared: 'All subclasses see me', **args)
    @shared = shared
  end
end

class Child < Super
  def initialize(special: nil, **args)
    super # this reads **args implicitly!
    @special = special
  end

  def run
    puts "Shared:#{shared} Special:#{@special}"
  end
end

Child.run(special: 2)
# Shared:All subclasses see me Special:2 

Child.run(shared: "super", special: 2)
# Shared:super Special:2 

以上是关于ruby 如何从超类初始化关键字参数(对依赖注入很有用)的主要内容,如果未能解决你的问题,请参考以下文章

从超类调用子类的方法

如何键入提示 Python 函数返回从超类派生的任何类的实例?

无法从超类访问 Django 模型的子类

Python子类方法从超类方法继承装饰器

如何判断是不是从超类添加了子视图?

如何从超类中检测对象