Genericsでシンボル「That」を使用したコードの例をいくつか見てきました。すなわちScalaのシンボル「That」の意味
def map[B, That](f : (A) => B) : That
しかし、その言葉のGoogleの-能力が不足しているため、私はそれは私がそれを使用する方法か、何をするか上の任意のドキュメントを見つけることができません。
通常のタイプのプレースホルダですか、それとも特別なことをしますか?
Genericsでシンボル「That」を使用したコードの例をいくつか見てきました。すなわちScalaのシンボル「That」の意味
def map[B, That](f : (A) => B) : That
しかし、その言葉のGoogleの-能力が不足しているため、私はそれは私がそれを使用する方法か、何をするか上の任意のドキュメントを見つけることができません。
通常のタイプのプレースホルダですか、それとも特別なことをしますか?
[...]
の中の識別子は、すべてタイプパラメータとして扱われます。
したがって、def map[B, That](f : (A) => B) : That
の場合、That
は、汎用戻り型を意味します。それをZ
と置き換えてください。たとえば、def map[B, Z](f : (A) => B) : Z
と同じ効果があります。 Javaへの翻訳
、それは次のようになります。
public <B, That> That map(f: Function1<A, B>)
または、他の言葉で、That
は一般的な(または、Scalaの専門用語、typeパラメータで)です。
これは、それを呼び出すときの「プレースホルダ」(つまり、型パラメータ)です。コレクションライブラリの規約は、作成されるコレクションのタイプを表すのにThat
を使用することです。したがって、this
からThat
に変換します。
「プレースホルダー」と呼ぶのは誤解を招く可能性があります。これは正式型パラメータであり、メソッド定義の「通常の」(値)引数名は仮パラメータです。これは、メソッドの引数に対する型レベルの対応です。 –
@RandallSchulz - 確かに、それはOPがそれを呼んだものです。私はそれが何であるかを言うために私の答えを修正し、「プレースホルダー」は技術的に正しい用語ではないことを示唆しています。 –
これはプレースホルダーです - はい –