如何从 scala 中的类型别名构造一个对象?
type MyType = List[Int]
println(List[Int]())
println(MyType()) // error: not found: value MyType
这对于必须返回该类型的新实例的函数来说是有问题的。基本示例:
def foo(x: MyType): MyType = {
if (x.head == 0) MyType() // Should Nil be used?
else if (x.head == -1) new MyType(1,2,3,4)
else x
}
How can foo
不知道实际类型MyType
?
Scala(如 Java)对于类型和值有不同的命名空间,类型别名仅将别名引入类型命名空间。在某些情况下,您可以将别名与val
引用伴随对象以获得您正在寻找的效果:
scala> case class Foo(i: Int)
defined class Foo
scala> type MyType = Foo
defined type alias MyType
scala> val MyType = Foo
MyType: Foo.type = Foo
scala> MyType(1)
res0: Foo = Foo(1)
这不适用于List[Int]
,不过,因为虽然两者List
类型和List
伴生对象的apply
方法有一个类型参数,List
伴生对象本身没有。
你最好的选择是使用类似的东西Nil: MyType
,但您会发现通常使用这样的类型别名(即只是作为一种缩写)通常不是最好的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)