Scala 如何获取副产品实例的单个已定义元素?
我将简明扼要地说:Scala 如何获取副产品实例的单个已定义元素?,scala,shapeless,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。我是否可以
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()
来获得定义的值?结果表明,我的问题一开始就有点不正确。因为我们处理的是联合类型,所以在事先不知道它的类型的情况下得到一些结果就成了一种废话:不能安全地使用该结果。例如:
// suppose this is what I want
val value = v.getPresent()
use(value)
这里的use
应该能够处理String
和Int
,其最小上限类似于Any
,这意味着不再需要任何类型安全性
我已经重新考虑了我的设计,现在一切正常。你认为
v.unconditionalGet
的结果类型是什么?@Miles,我知道了。实际上,我正在将copproduct
映射到一对(String,String)
或(Int,String)
,我意识到我只对元组的第二部分感兴趣,所以我刚刚重写了那部分。不管怎样,我喜欢评论中的问题回答问题:)如果我删除这个问题是否正确?@cds:我会说,你应该自己回答这个问题,解释你的想法,而不是删除。