下面是一個例子模式與類型參數匹配一定到最終類
def maybeeq[A <: String](x: A):A = x match {
case z:A => x
}
它編譯過程中產生的以下錯誤消息
Error:(27, 12) scrutinee is incompatible with pattern type; found : A required: String case z:A => x
我可以把任何最終類成A的結合來重現錯誤。
爲什麼這個編譯非終結類,但最終失敗?爲什麼輸入擦除不只是用String替換A?
編輯:
注:這種結合可以讓我傳遞字符串類型的值「X」參數。所以'x'可以只是一個字符串,不必是字符串的子類型,所以我不要求編譯器編譯具有不正確簽名的方法。在現實世界的代碼中,我只是將String放在A參數上,但從實驗的角度來看,我很感興趣,爲什麼需要在現有限制(基於最終類本質)之上的這種額外限制。
但x參數可以只是一個字符串,並通過綁定檢查。我不明白爲什麼編譯器需要限制這種情況。 –
'A <:String'表示'A'是'String'的子類型,由於'String'是最終類型,'A'只能是'String'類型,所以爲什麼不直接使用'String'類型? – chengpohi
從實際角度來看,你是對的,但我想知道爲什麼需要額外的限制。我認爲這種限制通常是爲了防止開發人員犯運行時錯誤,但在這種特定情況下,由於類的最終性質,這種錯誤是不可能的。因此,看起來現有限制之上的一個限制並沒有任何實際意義。 –