2017-10-20 78 views
3

当读取this article我来到了语法如下:声明Scala中的一个通用类方括号

implicit val slaveCanRead: Slave HasPrivilege Read = null 

作者说:

另外,请不说Slave HasPrivilege Read只是另一个符号HasPrivilege[Slave, Read]

保持基本scala中的示例,该示例也可以是

val foo: Map[String, Long] = Map() 
val bar: String Map Long = Map() 

我正在寻找一些文档/文章,可以解释这种语法,但找不到任何。有人可以指向允许这种语法的语言功能吗?

回答

4

它的确如同T1 TCon T2 = TCon[T1, T2]一样简单。这是section 3.2.8 of the language specification

InfixType ::= CompoundType {id [nl] CompoundType} 

如果缀类型与:结束它是正确的关联,和否则是左结合,就像方法和混合固定性是不带括号的错误。

2

这是一个infix type。因此

val map: Map[String, Int] = ... 

实际上相当于

val map: String Map Int = ... 

是这是Function类型特别有用,所以你可以写

val f: Int => Int = ... 

,而不是

val f: Function[Int, Int] = ...