Объявите универсальный класс в 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()
Я искал некоторую документацию / статьи, которые объяснили бы этот синтаксис, но не смог найти ни одного. Может кто-то указать на языковую функцию, которая позволяет этот синтаксис?
2 ответа
Это действительно так же просто, как T1 TCon T2 = TCon[T1, T2]
, Это раздел 3.2.8 спецификации языка.
InfixType ::= CompoundType {id [nl] CompoundType}
Если тип инфикса заканчивается :
он является ассоциативным справа, в противном случае он остается ассоциативным, точно так же, как методы, а исправление смешивания является ошибкой без скобок.
Это инфиксный тип. таким образом
val map: Map[String, Int] = ...
на самом деле эквивалентно
val map: String Map Int = ...
Это особенно полезно для Function
типа, чтобы вы могли написать
val f: Int => Int = ...
вместо
val f: Function[Int, Int] = ...