想象一下节俭的联盟,如:
union MyUnion {
1. bool myBool
2. i64 myLong
3. double myDouble
}(persisted='true')
我想在Scala中做的是这样的事情:
case class MyClass(
myString: String,
myUnionType: ???
)
然后,我想将这个类实例化为:
import ...{thriftscala => thrift}
val myClass = MyClass("cool", thrift.MyUnion.MyBool)
val myOtherClass = MyClass("wow", thrift.MyUnion.MyLong)
请注意,我没有实例化MyBool
或MyLong
,我只想将它们作为“类型”传递。即,我没有这样做:
val myClass = MyClass("cool", thrift.MyUnion.MyBool(_))
我很好奇是否有办法使用节俭生成的Scala来做到这一点。
答案 0 :(得分:0)
您可以使用ADT这样的内容:
scala> sealed trait MyUnion
defined trait
一个MyUnion
这是你的基类,然后用case对象扩展:
scala> case object MyBool extends MyUnion
defined object MyBool
scala> case object MyDouble extends MyUnion
defined object MyDouble
scala> case object MyLong extends MyUnion
defined object MyLong
scala> case class MyClass(str : String, union : MyUnion)
defined class MyClass
如何使用它:
scala> MyClass("cool", MyBool)
res0: MyClass = MyClass(cool,MyBool)