回答
如果您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. 關於兩個綁定變量類型的Scala模式匹配
- 6. 打開,關閉,綁定和未綁定泛型類型
- 7. 使用自由綁定泛型類型作爲類型參數
- 8. 當類型爲空不叫自定義模型綁定
- 9. 靜態類型綁定與動態類型綁定
- 10. 未綁定泛型類型的C#基類不可用?
- 11. 1067:將類型值的隱式強制轉換爲不相關的類型flash.display:DisplayObject
- 12. 將int類型的值隱式強制爲不相關的類型字符串
- 13. 在一個動作中綁定兩個相同類型的對象
- 14. 模型綁定自定義類型
- 15. 如何在OCaml中定義彼此相關的兩種類型?
- 16. WebApi模型綁定的繼承類型
- 17. 將域模型類型的數據綁定到ViewModel類型
- 18. 如何爲Scala中的泛型類型指定一個類型爲Float和Double的綁定?
- 19. 類型類實例中的錯誤綁定類型變量
- 20. 綁定不同數據類型的行
- 21. Monad綁定堅持不同的類型?
- 22. 瞭解相關類型
- 23. 爲什麼這兩個顯然相同的對象有不同的類類型?
- 24. 使用特徵的相關類型作爲參數綁定的特徵
- 25. 綁定兩個不同的模型,關鍵路徑相同的NSArrayController的選擇
- 26. WPF XAML泛型類綁定
- 27. 如何綁定泛型類?
- 28. DataGrid綁定類型問題
- 29. Guice類型文字綁定
- 30. 綁定值複雜類型
你能砍周圍http://stackoverflow.com/questions/3508077/does-scala-have-type-disjunction-union-types – 2013-04-23 15:15:07