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. C#返回類型重協方差
- 6. 協方差,代表和泛型類型約束
- 7. 協方差和MVVM
- 8. C#泛型繼承和協方差
- 9. 協方差泛型集合
- 10. Java泛型協方差
- 11. 結果類型協方差 - 與方法返回輸入接口類型和特定類型的泛型類
- 12. 協方差和反變量匿名類型
- 13. 協方差,逆變和消除多餘的類型參數
- 14. 類型參數,約束和協方差/逆變
- 15. 協方差和逆變爲通配符類型
- 16. 通用協方差和鑄造到超類型
- 17. 成員和方法之間的差異
- 18. 使用通用代理類型的委託類型和協方差
- 19. 協方差和反變量
- 20. 協方差和逆變
- 21. 委託協方差和Contavariance
- 22. C#協方差和繼承
- 23. C++協方差和引用
- 24. 爲什麼C#out泛型類型參數違反協方差?
- 25. Java協方差
- 26. KeyValuePair協方差
- 27. 協方差
- 28. Java類和成員對象類型
- 29. 想不通Scala的類型繼承,協方差,方法和清單問題
- 30. C++成員類型
可否請你改變公認的答案保羅的?礦井不夠。 – 2012-02-05 15:53:53
@ DanielC.Sobral完成。謝謝 – Michael 2012-02-06 09:02:47