使用してScalaのアイデンティティコールを理解することはできませんよ。私はPredef識別機能をいじり先物とこの表現になった先物
identity(_: Future[A])
これはFuture[A] => Future[A]
を返しますが、私はちょうどFuture[A]
を期待していたがアイデンティティメソッドはちょうど正確に_: Future[A]
を意味するのだろうかと思うので、入力を返します。
使用してScalaのアイデンティティコールを理解することはできませんよ。私はPredef識別機能をいじり先物とこの表現になった先物
identity(_: Future[A])
これはFuture[A] => Future[A]
を返しますが、私はちょうどFuture[A]
を期待していたがアイデンティティメソッドはちょうど正確に_: Future[A]
を意味するのだろうかと思うので、入力を返します。
identity
ある
identity((x: Future[A]) => x)
に
identity(_: Future[A])
が拡大:あなたはちょうどので、パラメータの種類(渡された関数のではなく、アイデンティティ)を指定しています以下のようになります。
def identity[A](x: A): A = x
ご覧のとおり、それは私ですthod。あなたは、次のような何か書くとき:
val f = identity(_: Future[Int])
をあなたはタイプFuture[Int] => Future[Int]
の関数に、identity
の方法を変革しています。 _: Future[Int]
の部分はタイプ帰属と呼ばれ、A
がidentity
のタイプがFuture[Int]
であることをコンパイラーに通知します。
メソッドを関数に変換するプロセスは、η拡張の名前になります。
val f = identity[Future[Int]] _
ええ、私はそれをしばらく再生した後に答えを実現しました。また、最後に示した例は確かに示しています。私が正しいとすれば、引数を渡すことなく、識別関数をカリングしますが、パラメータ化された型がFutureであることを指示していますか? –
あなたはカールしていません。その方法では、メソッドを関数に変換するためにη拡張を使用しています。 – lambdista
この場合、_: Future[A]
は、Future[A]
という1つのパラメータを取り、それを返す関数を表しています。 List(1,2).map(_.toString)
にマッピングするパラメータはx => x.toString
に展開、または単一のパラメータを取る関数、およびそれにtoString
を呼び出す方法と同様に
。
あなたのケースでは、あなたはそれに関するメソッドを呼び出すことはありません。定義されてPredefでFuture[A] => Future[A]
いいえ、 '(x:Future [A])=> identity(x)'に展開されます。 –
は、あなたがこの方法を自分で書いたり、ソースからこれをしました:
P.Sは:あなたは次のように同じことを行っているだろうか? –