簡體   English   中英

Scala存在類型奇怪的行為

[英]Scala Existential type weird behavior

我的 REPL 中有以下內容:

scala> trait T[A]
defined trait T

scala> :kind T[A] forSome {type A}
T[_]'s kind is A

scala> :kind T[_]
T[_]'s kind is A

現在當我這樣做時:

trait e[_] extends T[_]

我得到

error: class type required but T[_] found

但是,以下工作:

scala> trait e[_] extends T[Int]
defined trait e

scala> :kind T[Int]
T[Int]'s kind is A

為什么 T[Int] 與 T[_] 的處理方式不同,而它們屬於同一類?

這不是關於種類,而是關於類型是否是類類型(包括特征)。

你可以寫

type T <: U

對於每種類型U

trait T extends U

僅適用於類類型U

子類型化和繼承/子類化是不同的。

trait T[A]對應的類型是每個類型A的類類型。 所以T[Int]是一個類類型。 (當您編寫extends A[B] ,重要的是A是類類型, B可以是任意類型。)

存在類型(如T[_]又名T[A] forSome {type A} )不是類類型。 (您也可以將T[_]視為所有T[A]的超類型。實際上, T[_]是所有T[A]的最小上限)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM