Avatar
public class Animal { public init() {} } func main() { // OK _ = Animal() // OK _ = Animal.init() // OK _ = Animal.self.init() // error: Constructing an object of class type 'Animal' with a metatype value must use a 'required' initializer _ = (Animal.self as Animal.Type).init() }
2:49 AM
↑面白い。 式「Animal.self」の型は「Animal.Type」だと思っていたけど、 Animal.selfは { K ; K == Animal.Type } で、 Animal.Typeは { K ; K <= Animal.Type } であって、 型システム上の区別があるようだ
2:51 AM
一度ダイナミックなメタタイプになってしまうと、サブタイプのメタタイプが入る可能性があって、意味が変わる。 (edited)