1

私は、scala でより高い種類の型のユーザー定義のエイリアスを持っています。

type FutureOfLastError = Future[LastError]

私もそのタイプの値を持っています:

val myFuture: FutureOfLastError = ...

読み取り可能なコードを書くには、(たとえば)次のようなメソッドを定義したいと思います

def mapToString = { ... }

FutureOfLastError のインスタンスを Future[String] にマップし、次のように呼び出します

myFuture mapToString

これどうやってするの?それは可能ですか?ケースクラスでのカプセル化はすでに試しましたが、あらゆる種類の暗黙的な変換が頭に浮かびました。

私のお気に入りの選択肢は型エイリアスのコンパニオン オブジェクトですが、コンパニオン オブジェクトから特性 Future (map など) のメソッドを呼び出すことができないため、機能させることができませんでした。

4

1 に答える 1

1

実際にクラスを拡張する必要はありません。暗黙のクラスを使用できます (これは、"enrich my library" パターンのシンタックス シュガーにすぎません)。これはそれを行うべきであるのと同じくらい簡単なことです:

implicit class MyFutureOps( future: FutureOfLastError ) {
  def mapToString = future.map(_.toString)
}
于 2013-03-04T09:56:05.350 に答える