5

このイディオム (?) は、階段の本の中で何度も出てきます。

val b:A = new B

また

val b = new B
val b2:A = b

教科書でいくつかの点を指摘しようとする以外に、何かの推論された型とは異なる型を宣言したいのはなぜですか?

ところで、これに何か名前はありますか?

4

2 に答える 2

14

次の場合に役立ちます。

  1. プログラマーの意図を説明する (私は B を作成しましたが、A の動作だけに関心があります)
  2. A で定義されたメソッドのみを使用するようにします。これにより、コードを大幅に変更することなく、後で具体的な実装を交換できます。
  3. IDE または REPL を使用するときに使用できるオートコンプリートのリストを簡素化します。
  4. ある時点で暗黙の変換を強制します。

より複雑なインスタンス化の場合、推論された型が正しいものであることを保証します。例えば

sealed trait Answer
case object Yes extends Answer
case object No extends Answer

scala> val a = List( Yes, Yes, No )
a: List[Product with Serializable with Answer] = List(Yes, Yes, No)

scala> val b: List[Answer] = List( Yes, Yes, No )
b: List[Answer] = List(Yes, Yes, No)
于 2012-06-08T06:36:21.627 に答える
9

私はそれがインターフェースに対するプログラミングのイディオムに似ていると主張します。することによって

val b:A = new B

その後は、によって提供されるインターフェイス以外に依存していないことを確認してくださいA。つまり、何も変更しないことにした場合でも、問題が発生することが保証されますb:A = new C

于 2012-06-08T06:09:42.363 に答える