Generics でシンボル「That」を使用するコードの例をいくつか見てきました。すなわち
def map[B, That](f : (A) => B) : That
しかし、その単語のグーグル機能がないため、その機能や使用方法に関するドキュメントが見つかりません。
それは単に通常のタイプのプレースホルダーですか、それとも何か特別なことをしますか?
内部のすべての識別子[...]
は、型パラメーターとして扱われます。
したがって、の場合は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 lingoでは型パラメーター)です。
これは、あなたがそれを呼ぶときの「プレースホルダー」(つまり、タイプパラメーター)です。コレクションライブラリの規則は、That
作成されるコレクションのタイプを表すために使用されます。(したがって、からに変換しthis
ますThat
。)