2013-02-13 6 views
6

Genericsでシンボル「That」を使用したコードの例をいくつか見てきました。すなわちScalaのシンボル「That」の意味

def map[B, That](f : (A) => B) : That 

しかし、その言葉のGoogleの-能力が不足しているため、私はそれは私がそれを使用する方法か、何をするか上の任意のドキュメントを見つけることができません。

通常のタイプのプレースホルダですか、それとも特別なことをしますか?

+3

これはプレースホルダーです - はい –

答えて

13

[...]の中の識別子は、すべてタイプパラメータとして扱われます。

したがって、def map[B, That](f : (A) => B) : Thatの場合、Thatは、汎用戻り型を意味します。それをZと置き換えてください。たとえば、def map[B, Z](f : (A) => B) : Zと同じ効果があります。 Javaへの翻訳

3

、それは次のようになります。

public <B, That> That map(f: Function1<A, B>) 

または、他の言葉で、Thatは一般的な(または、Scalaの専門用語、typeパラメータで)です。

3

これは、それを呼び出すときの「プレースホルダ」(つまり、型パラメータ)です。コレクションライブラリの規約は、作成されるコレクションのタイプを表すのにThatを使用することです。したがって、thisからThatに変換します。

+0

「プレースホルダー」と呼ぶのは誤解を招く可能性があります。これは正式型パラメータであり、メソッド定義の「通常の」(値)引数名は仮パラメータです。これは、メソッドの引数に対する型レベルの対応です。 –

+0

@RandallSchulz - 確かに、それはOPがそれを呼んだものです。私はそれが何であるかを言うために私の答えを修正し、「プレースホルダー」は技術的に正しい用語ではないことを示唆しています。 –

関連する問題