Scala变量参数计数

时间:2013-05-21 10:54:10

标签: scala disjoint-union

在某些库中是否实现了变量参数count scala Either,我的意思是与HList类似的东西。我不想自己实施:-)

1 个答案:

答案 0 :(得分:1)

这不是您问题的直接答案,但您是否考虑过使用Scalaz的Either类型符号\/?有了这个,你可以用和类型“链接”几种类型,如下所示:

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的评论中所述)可能是更好的解决方案。