回答
如果您A
和B
是完全不相關的(例如,你所需要的,否則,你可以只使用結構類型不常用的方法),這意味着當你使用它作爲方法參數,您仍然需要實際使用的類型。
在這種情況下,Either[A, B]正是您所需要的。它表示一個對象必須是A或B中的一個,並且您可以在任一類中使用模式匹配或其他方法來檢查它們。
例如:
class MyClassA {
def methodA() = println("I'm A")
}
class MyClassB {
def methodB() = println("I'm B")
}
def m(a: Either[MyClassA, MyClassB]) {
a match {
case Left(a) => a.methodA()
case Right(b) => b.methodB()
}
}
m(Left(new MyClassA)) // OK
m(Right(new MyClassB)) // OK
m(Left(new MyClassB)) // Failed, a Left must be a MyClassB instance
你可能有興趣在此article,這說明了什麼或者是很清楚。
小點;最後一行是一樣的倒數第三行 - 也許你的意思是'M(左(新MyClassB))'或'M(右(新MyClassA))'。此外,爲了簡明起見,在M'的'主體,可以使用'a.fold(A => a.methodA()中,b => b.methodB())',或甚至'a.fold(_。 methodA(),_.methodB())' – 2013-04-23 22:47:01
@KristianDomagala你,我在那裏得到一個錯字。謝謝。 :) – 2013-04-23 23:14:34
參見[這個答案](http://stackoverflow.com/a/6312508/217959)對@ OM-NOM-NOM掛鉤的問題。萬里薩賓已經有一個[博客文章(http://www.chuusai.com/2011/06/09/scala-union-types-curry-howard/)證明* *拆箱聯合類型 - 這滴無論是包裝完全對象。 – nadavwr 2013-04-25 23:42:55
- 1. 單強類型的不同類型的兩個相似的類
- 2. 問題與兩個相關模型類
- 3. 相關類型
- 4. 具有兩個不相等(唯一)類型的泛型類
- 5. 類型類和相關類型
- 6. 相同類型的相同類型的兩個實例
- 7. 相關的方法類型和類型
- 8. 關於兩個綁定變量類型的Scala模式匹配
- 9. 相同類型的多個關係類
- 10. 具有相關泛型類型的泛型類不能專用?
- 11. Monotouch綁定 - 「不能從源類型轉換爲目標類型。」
- 12. 相關類和類型
- 13. 打開,關閉,綁定和未綁定泛型類型
- 14. 使用自由綁定泛型類型作爲類型參數
- 15. Ninject在類型與兩個泛型參數綁定
- 16. Ninject綁定:綁定到不同類型的相同界面。爲什麼有效?
- 17. 斯威夫特:投泛型類型爲同一泛型類型,但與相關類型的子類
- 18. 兩個類具有相同的XML類型名稱爲AXIS
- 19. 當類型爲空不叫自定義模型綁定
- 20. 靜態類型綁定與動態類型綁定
- 21. 未綁定泛型類型的C#基類不可用?
- 22. 協議相關的類型和泛型
- 23. 將int類型的值隱式強制爲不相關的類型字符串
- 24. 1067:將類型值的隱式強制轉換爲不相關的類型flash.display:DisplayObject
- 25. 模型綁定自定義類型
- 26. 在一個動作中綁定兩個相同類型的對象
- 27. 1067:類型值的隱式強制到一個不相關的類型flash.data:SQLConnection
- 28. 如何在OCaml中定義彼此相關的兩種類型?
- 29. MVC-模型綁定的複雜類型
- 30. WebApi模型綁定的繼承類型
你能砍周圍http://stackoverflow.com/questions/3508077/does-scala-have-type-disjunction-union-types – 2013-04-23 15:15:07