Одна из приятных особенностей ниши Scala является то, что многие бинарные операции (е. Г. f(x, y)
) может быть вызван из положения инфиксной x f y
. Это относится к нормальному вызову метода:
case class InfixMethodCalls(x: Int) {
def wild(y: Int): Int = x + y
}
val infix = InfixMethodCalls(3)
infix wild 4
типа конструкторы:
// A simple union type based on http://www.scalactic.org/
trait Or[A, B]
case class Good[A, B](value: A) extends Or[A, B]
case class Bad[A, B](value: B) extends Or[A, B]
def myMethod(x: Int Or String): Int
// This is the same as
def myMethod(x: Or[Int, String]): Int
и unapply
/unapplySeq
:
object InfixMagic {
def unapply(x: Any) = Option((List(x), x))
}
123 match {
case v :: Nil InfixMagic x => println(s"got v: $v and x: $x")
}
// is the same as
123 match {
case InfixMagic(v :: Nil, x) => println(s"got v: $v and x: $x")
}
Таким образом, в случае of XmlGet
этого синтаксиса здесь:
case "open" :: Nil XmlGet _ =>
такая же, как:
case XmlGet("open" :: Nil, _) =>
И _
игнорирует параметр Req
, который является второй частью возвращаемого значения из TestGet.unapply
.
это какая-то частичная функция. Я бы предложил получить класс RuleHelper и искать скрытые импликации. – Rumoku
ответил в громадной комнате. Это тот же синтаксис, что и '_ :: Nil'. –