我見過幾個使用泛型符號「That」的代碼示例。即Scala中的符號「That」的含義
def map[B, That](f : (A) => B) : That
但是,由於該詞的谷歌能力的缺乏,我找不到任何有關它的功能或使用方法的文檔。
它只是一個普通類型的佔位符,還是它做了一些特別的事情?
我見過幾個使用泛型符號「That」的代碼示例。即Scala中的符號「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
是一個通用的(或在斯卡拉隱語,類型參數)。
這是一個「佔位符」,就像你所說的那樣(即一個類型參數);集合庫中的約定是使用That
來表示將要創建的集合的類型。 (因此,您從this
轉換爲That
。)
稱它爲「佔位符」充其量是誤導。它是一個正式的類型參數,就像方法定義中的「常規」(值)參數名稱是形式參數一樣。這是一種方法論點的類型層次。 – 2013-02-13 15:17:09
@RandallSchulz - 的確如此,但OP就是這麼稱呼它的。我修改了我的答案,說出它是什麼,並建議「佔位符」不是技術上正確的術語。 – 2013-02-13 16:01:50
它是佔位符 - 是 – 2013-02-13 07:58:44