密封特性可以包含元组吗?

时间:2015-01-11 17:03:26

标签: scala

这个密封的特性编译:

sealed trait Tree[Int , String]

但如果我使用元组:

sealed trait Tree[(Int , String)]

导致编译器错误:

identifier expected but '(' found.

元组是一个特殊的密封特征吗?

2 个答案:

答案 0 :(得分:5)

宣布

sealed trait Tree[Int, String]

它实际上与IntString类型无关。您正在声明名为IntString的类型参数(即他们"影子" IntString)。例如,这是一个有效的扩展名:

case object Pine extends Tree[Boolean, BigDecimal]

编译器抱怨,因为您使用无效语法来声明类型参数(括号)。看起来你正在尝试声明固定类型参数,这没有任何意义。

通过使用def(或类或任何特征)尝试此操作会得到相同的编译错误:

def foo[(Int, String)](a: (Int, String)): Unit

答案 1 :(得分:0)

您的原始声明(

trait Tree[Int, String]

)并不意味着特征Tree在Scala中使用IntString的参数。

如果您要声明一个需要IntString的小组:

class Foo(i: Int, s: String)

如果您需要该类是无法获取参数的特征:

trait Foo {
  val i: Int
  val s: String
}