什么是scala中的“Something#A”

时间:2018-01-29 10:06:53

标签: scala

我在Scala中找到了以下语法。我从未见过#,也找不到有关它的更多信息? #是什么意思?

case class WithRole(role: Role) extends Authorization[User, DefaultEnv#A]

1 个答案:

答案 0 :(得分:1)

它是scala引用类型的方法之一。我引用斯卡拉的深度:

  

Scala中的类型通过两种机制引用:hash(#)和dot(。)   运营商。点运算符可以被认为对类型执行相同的操作   对象的成员。它指的是在特定对象实例上找到的类型。这是   称为路径依赖型。使用点运算符定义方法时   对于特定类型,该类型绑定到对象的特定实例。这意味着   您不能使用来自同一类的不同对象的类型来满足任何类型   使用点运算符进行的约束。想到这一点的最好方法是有一个   由点运算符连接的特定对象实例的路径。对于变量   匹配您的类型,它必须遵循相同的对象实例路径。你可以看一下考试 -   后来这个。   哈希运算符(#)比点运算符更宽松。它被称为   类型投影,这是一种在不需要的情况下引用嵌套类型的方法   对象实例的路径。这意味着您可以像引用嵌套类型一样引用它   没有嵌套。