10
Q
類型成員和協方差
A
回答
14
Box在類型T中是不變的,但這並不意味着什麼都看不到。
abstract class Box {
type T
def get: T
}
type InvariantBox = Box { type T = AnyRef }
type SortofCovariantBox = Box { type T <: AnyRef }
什麼改變方差的情況是類型的暴露程度和方式。抽象類型更不透明。但是你應該在repl中玩這些問題,這很有趣。
# get a nightly build, and you need -Ydependent-method-types
% scala29 -Ydependent-method-types
abstract class Box {
type T
def get: T
}
type InvariantBox = Box { type T = AnyRef }
type SortofCovariantBox = Box { type T <: AnyRef }
// what type is inferred for f? why?
def f(x1: SortofCovariantBox, x2: InvariantBox) = List(x1, x2)
// how about this?
def g[U](x1: Box { type T <: U}, x2: Box { type T >: U}) = List(x1.get, x2.get)
等
相關問題
- 1. 方法返回類型協方差
- 2. 協方差與函數返回類型
- 3. 沒有返回類型的協方差
- 4. 協方差,代表和泛型類型約束
- 5. Java泛型協方差
- 6. 結果類型協方差 - 與方法返回輸入接口類型和特定類型的泛型類
- 7. 類型參數,約束和協方差/逆變
- 8. 協方差和反變量匿名類型
- 9. 協方差和逆變爲通配符類型
- 10. 協方差,逆變和消除多餘的類型參數
- 11. 成員和方法之間的差異
- 12. 協方差和反變量
- 13. C#協方差和繼承
- 14. C++協方差和引用
- 15. 爲什麼C#out泛型類型參數違反協方差?
- 16. KeyValuePair協方差
- 17. Java協方差
- 18. C++成員類型
- 19. C#泛型接口協方差
- 20. 泛型,協方差/反變量等
- 21. 泛型協方差變通辦法?
- 22. 列表::方法和協方差
- 23. typename,類型成員和非類型成員:它是有效的代碼嗎?
- 24. 蘊類型的類成員
- 25. 基於其他成員類型的條件成員類型
- 26. 協方差問題
- 27. 協方差與列
- 28. 陣列協方差
- 29. 如何設計類型協方差錯誤
- 30. 錯誤:協議類型值「STRING」的訪問成員未實現
可否請你改變公認的答案保羅的?礦井不夠。 – 2012-02-05 15:53:53
@ DanielC.Sobral完成。謝謝 – Michael 2012-02-06 09:02:47