2013-02-13 345 views
6

我見過幾個使用泛型符號「That」的代碼示例。即Scala中的符號「That」的含義

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

但是,由於該詞的谷歌能力的缺乏,我找不到任何有關它的功能或使用方法的文檔。

它只是一個普通類型的佔位符,還是它做了一些特別的事情?

+3

它是佔位符 - 是 – 2013-02-13 07:58:44

回答

13

[...]中的任何標識符都將被視爲類型參數。

因此,如果是def map[B, That](f : (A) => B) : ThatThat只意味着一個通用的返回類型。例如,用Z代替:def map[B, Z](f : (A) => B) : Z的效果完全相同。

3

翻譯到Java,這將是:

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

或者,換句話說,That是一個通用的(或在斯卡拉隱語,類型參數)。

3

這是一個「佔位符」,就像你所說的那樣(即一個類型參數);集合庫中的約定是使用That來表示將要創建的集合的類型。 (因此,您從this轉換爲That。)

+0

稱它爲「佔位符」充其量是誤導。它是一個正式的類型參數,就像方法定義中的「常規」(值)參數名稱是形式參數一樣。這是一種方法論點的類型層次。 – 2013-02-13 15:17:09

+0

@RandallSchulz - 的確如此,但OP就是這麼稱呼它的。我修改了我的答案,說出它是什麼,並建議「佔位符」不是技術上正確的術語。 – 2013-02-13 16:01:50