如何获取Coproduct实例的单个已定义元素?

时间:2014-08-10 13:06:38

标签: scala shapeless

我会简明扼要地说:

val pvSchema = RecordType.like(
  's  ->> "" ::
  'l  ->> Long.MaxValue ::
  HNil
)

type PossibleValue = pvSchema.Union

val v = Coproduct[PossibleValue]('s -> "string")

要获得Some[String]我可以使用v.get('s),而v.get('i)会返回None。我可以以某种方式v.unconditionalGet()来获取定义的值而不检查所有其他可能性吗?

1 个答案:

答案 0 :(得分:2)

事实证明我的问题有点不正确。因为我们处理的是union类型,所以在不事先知道它的类型的情况下得到一些结果会变成一种废话:一个人不能安全地使用该结果。 E.g:

// suppose this is what I want
val value = v.getPresent()

use(value)

此处use应该能够同时处理StringInt,并且最小上限就像Any,这意味着不再需要类型安全

我有点重新考虑我的设计,现在一切正常。