这个密封的特性编译:
sealed trait Tree[Int , String]
但如果我使用元组:
sealed trait Tree[(Int , String)]
导致编译器错误:
identifier expected but '(' found.
元组是一个特殊的密封特征吗?
答案 0 :(得分:5)
宣布
时sealed trait Tree[Int, String]
它实际上与Int
和String
类型无关。您正在声明名为Int
和String
的类型参数(即他们"影子" Int
和String
)。例如,这是一个有效的扩展名:
case object Pine extends Tree[Boolean, BigDecimal]
编译器抱怨,因为您使用无效语法来声明类型参数(括号)。看起来你正在尝试声明固定类型参数,这没有任何意义。
通过使用def(或类或任何特征)尝试此操作会得到相同的编译错误:
def foo[(Int, String)](a: (Int, String)): Unit
答案 1 :(得分:0)
您的原始声明(
trait Tree[Int, String]
)并不意味着特征Tree
在Scala中使用Int
和String
的参数。
如果您要声明一个需要Int
和String
的小组:
class Foo(i: Int, s: String)
如果您需要该类是无法获取参数的特征:
trait Foo {
val i: Int
val s: String
}