[英]how to get scala higher-kinded type to work
我正在努力提高對Scala中更高種類的類型的理解。 回到基礎知識時,我堅持以下幾點:
def fooList[A <: Int](x: List[A]): List[A] = x.map{ e => e + 1 }
我不理解,Scala編譯器不接受它。 “ A”必須是Int的子類。 因此,在Int下傳遞的任何類型都應該起作用。 為什么會抱怨? 有人可以在這里建議我嗎?
中號
在這種情況下, A
實際上必須是Int
,因為您不能創建Int
的子類,但編譯器似乎不想證明這一點。 的是,除了,因為A <: Int
,則+
的方法Int
返回一個Int
。
因此e + 1
是一個Int
而不是A
(即使A
必須是一個Int
)。 因此, x.map(e => e + 1)
返回List[Int]
而不是List[A]
。 為了返回List[A]
,您需要一些帶有+
方法的類A
,該類也返回A
,但您不會這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.