3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
結(jié)構(gòu)類型定義 - 即通過它支持的方法描述的類型。例如:
object Closer { def using(closeable: { def close(): Unit }, f: => Unit) { try { f } finally { closeable.close } }}
請(qǐng)注意,除了具有方法之外,未定義參數(shù)的類型closeable
close

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
Type-Constructor Polymorphism(又名更高級(jí)的類型)
例如,如果沒有此功能,您可以表達(dá)在列表上映射函數(shù)以返回另一個(gè)列表,或在樹上映射函數(shù)以返回另一個(gè)樹的想法。但你不能表達(dá)這種想法通常不高于種。
使用更高類型,您可以捕獲任何使用其他類型參數(shù)化的類型的想法。一個(gè)帶有一個(gè)參數(shù)的類型構(gòu)造函數(shù)被認(rèn)為是實(shí)物(*->*)
。例如,List
。返回另一個(gè)類型構(gòu)造函數(shù)的類型構(gòu)造函數(shù)被認(rèn)為是實(shí)物(*->*->*)
。例如,Function1
。但是在Scala中,我們有更高的類型,因此我們可以使用其他類型構(gòu)造函數(shù)進(jìn)行參數(shù)化的類型構(gòu)造函數(shù)。所以他們就像((*->*)->*)
。
例如:
trait Functor[F[_]] { def fmap[A, B](f: A => B, fa: F[A]): F[B]}
現(xiàn)在,如果你有Functor[List]
,你可以映射列表。如果你有Functor[Tree]
,你可以映射樹木。但更重要的是,如果你有Functor[A]
任何A類(*->*)
,你可以映射一個(gè)函數(shù)A
。
添加回答
舉報(bào)