5
我是新來的Scala,目前學習Scala中的類型參數,我遇到以下情況。Scala中的子類型和類型參數
假設我有2個類別A
和B
,其中B
是A
的子類型。
class A {
...
}
class B extends A {
...
}
所以我可以說B <: A
。
這是否也意味着List[B] <: List[A]
?
我是新來的Scala,目前學習Scala中的類型參數,我遇到以下情況。Scala中的子類型和類型參數
假設我有2個類別A
和B
,其中B
是A
的子類型。
class A {
...
}
class B extends A {
...
}
所以我可以說B <: A
。
這是否也意味着List[B] <: List[A]
?
在List的情況下,B <: A
確實意味着List[B] <: List[A]
,因爲List的類型參數是協變的。製作類型參數協變意味着它只能在List的定義中出現在協變位置,即它只能顯示爲方法的返回類型,而不能顯示爲參數的類型。 「斯卡拉之旅」包含一個關於variance的部分。維基百科也有很好的article about variance。這三個選項的類型參數的變化是:
C[A]
不是C[B]
一個亞型,不管是什麼A
和B
之間的關係。這樣的例子是可變數據結構,例如數組。B <: A
意味着C[B] <: C[A]
。示例是不可變數據結構或返回類型的函數。A <: B
暗示C[B] <: C[A]
。例如,函數在它們的參數類型中是相反的。
它也很好地解釋了Martin Odersky的Scala課程(https://class.coursera.org/progfun-2012-001/lecture/83),但您必須註冊,但這是值得的它:-) –