考虑以下代码块。
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)
继承?
答案 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表或数据集。这就是全部。