给定类型T
是否可以创建类型包含的所有可能值的列表(如果它是有界的)?例如,如果T
为Boolean
,则列表应为Set(True, False)
。
答案 0 :(得分:1)
您正在寻找类似于Haskell ng-options="z as z for z in f.qOptions"
类型类的东西吗?你可以在scalaz中找到它
Bounded
您可以找到Enum,Bounded和Applicative的参考文献。享受。
请注意,为所有> val bounded = implicitly[Enum[Boolean]]
bounded: scalaz.Enum[Boolean] = scalaz.std.AnyValInstances$booleanInstance$@108745fc
> (bounded.min |@| bounded.max)(_ |-> _)
res1: Option[List[Boolean]] = Some(List(false, true))
创建列表可能需要一段时间......
答案 1 :(得分:0)
并非所有类型都已关闭。例如,Boolean
的所有可能值都为Set(True, False)
,但Double
的答案是什么?
听起来你正在寻找定义代数类型。在Scala中,执行此操作的惯用方法是使用sealed trait
和case类和对象。有关详细信息,请参阅this question。