关于ruby类继承的一些混淆

时间:2014-04-03 12:45:03

标签: ruby class inheritance

考虑以下代码块。

 module Bosh::Director::Models  
      class CompiledPackage < Sequel::Model(Bosh::Director::Config.db)
      ...
      end
 end

我对Sequel::Model(Bosh::Director::Config.db)感到困惑,括号是什么意思?班级CompiledPackage如何从Sequel::Model(Bosh::Director::Config.db)继承?

2 个答案:

答案 0 :(得分:1)

Sequel::Model不是一个类 - 它是在模块Model上定义的方法Sequel,它创建一个新的匿名类,根据传递的param做一些摆弄它并返回此类。它定义如下(来自github):

module Sequel
  ...
  def self.Model(source)
    if cache_anonymous_models && (klass = Sequel.synchronize{Model::ANONYMOUS_MODEL_CLASSES[source]})
      return klass
    end
    klass = if source.is_a?(Database)
      c = Class.new(Model)
      c.db = source
      c
    else
      Class.new(Model).set_dataset(source)
    end
    Sequel.synchronize{Model::ANONYMOUS_MODEL_CLASSES[source] = klass} if cache_anonymous_models
    klass
  end
  ...
end

返回New类对象时,继承照常完成。

答案 1 :(得分:-2)

Sequel::Model对应于Ruby中的表或数据集。 Bosh::Director::Config.db可能会返回像mysql这样的数据库类型吗?所以Sequel::Model(Bosh::Director::Config.db)等于Sequel::Model(mysql),从它继承的任何类的行为都像mysql表或数据集。这就是全部。