1

Fantom プログラミング言語の強力な機能は、シリアライズ可能なクラスでよく使用されるit-block コンストラクターです。残念ながら、非常に単純なはずのことを行うのに十分な詳細なドキュメントを見つけることができません。このタイプのコンストラクターを宣言するクラスを拡張します。これまでに見つけた最高のドキュメントはこの投稿にありますが、私がやろうとしていることの例は示していません。

これらのクラスがあるとしましょう:

class Animal {
  protected const Str name
  new make( |This| f ) { f(this) }
  override Str toStr() { "I'm an Animal and my name is $name" }
}

class Main {
  Void main() {
    a := Animal {
      name = "Flipper"
    }
    echo( a )
  }
}

これまでのところ、「私は動物で、私の名前はフリッパーです」と表示されます。ここで、このクラスで Animal を拡張したいと思います。

class Dog : Animal {
  override Str toStr() { "I'm an Dog and my name is $name" }
}

しかし、Fantom コンパイラは次のように述べています。

Must call super class constructor in 'make'

そこで、クラスを次のように変更しました。

class Dog : Animal {
  new make( |This| f ) : super( this ) { f(this) }
  override Str toStr() { "I'm an Dog and my name is $name" }
}

しかし今、コンパイラは文句を言います:

invalid args make(|Playground::Animal->sys::Void|), not (Playground::Dog)

Animal の代わりに Dog インスタンスを渡しているので、これは理にかなっています。

4

1 に答える 1