2
是否在一些庫中實現了可變參數計數scala Either
,我的意思是類似於HList
的東西。我不想自己實現它:-)斯卡拉可變參數計數
是否在一些庫中實現了可變參數計數scala Either
,我的意思是類似於HList
的東西。我不想自己實現它:-)斯卡拉可變參數計數
這不是直接回答你的問題,而是你考慮過使用Scalaz的任一類型符號\/
?這樣,您可以在「鏈」幾種類型一起在一個和類型,像這樣:
import scalaz._
lazy val a: Int \/ String = ???
// a: scalaz.\/[Int,String] = <lazy>
lazy val b: Int \/ String \/ Double = ???
// b: scalaz.\/[scalaz.\/[Int,String],Double] = <lazy>
lazy val c: Int \/ String \/ Double \/ BigInt = ???
// c: scalaz.\/[scalaz.\/[scalaz.\/[Int,String],Double],BigInt] = <lazy>
val d1: Int \/ String \/ Double \/ BigInt = -\/(\/-(42d))
// d1: scalaz.\/[scalaz.\/[scalaz.\/[Int,String],Double],BigInt] = -\/(\/-(42d))
import Scalaz._
val d2: Int \/ String \/ Double \/ BigInt = 42d.right.left
// d2: scalaz.\/[scalaz.\/[scalaz.\/[Int,String],Double],BigInt] = -\/(\/-(42d))
val e1: Int \/ String \/ Double \/ BigInt = -\/(-\/(\/-("42")))
// e1: scalaz.\/[scalaz.\/[scalaz.\/[Int,String],Double],BigInt] = -\/(-\/(\/-("42")))
import Scalaz._
val e2: Int \/ String \/ Double \/ BigInt = "42".right.left.left
// e2: scalaz.\/[scalaz.\/[scalaz.\/[Int,String],Double],BigInt] = -\/(-\/(\/-("42")))
它還具有提取所以你可以匹配模式這些事情。
但是,如果您掌握了所有涉及的類型,那麼滾動您自己的代數數據類型(如上面的Travis Brown的評論所述)可能是更好的解決方案。
'或者'只是一個具有兩個構造函數的特定和類型。您可以將自己的總和類型(使用盡可能多的構造函數;也就是代數數據類型)編寫爲擴展密封特徵的一組案例類或對象。 –