Scala 中奇怪的模式匹配语法
例如,这里的模式匹配有点奇怪Scala 中奇怪的模式匹配语法,scala,pattern-matching,lift,Scala,Pattern Matching,Lift,例如,这里的模式匹配有点奇怪 serve("issues" / "by-state" prefix { case "open" :: Nil XmlGet _ => <p>None open</p> case "closed" :: Nil XmlGet _ => <p>None closed</p> case "closed" :: Nil XmlDelete _ => <p>All dele
serve("issues" / "by-state" prefix {
case "open" :: Nil XmlGet _ => <p>None open</p>
case "closed" :: Nil XmlGet _ => <p>None closed</p>
case "closed" :: Nil XmlDelete _ => <p>All deleted</p>
})
service(“问题”/“按州”前缀{
案例“打开”::Nil XmlGet=>None-open
案例“关闭”::Nil XmlGet=>无关闭
案例“已结束”::Nil XmlDelete=>全部删除
})
我不明白XmlGet\uuu部分
在做什么。
有人能解释一下吗?如果你通过
RuleHelper
类的liftweb
框架,你将能够做出一些假设
XmlGet
和XmlDelete
使用unapply方法和请求参数扩展了TestGet
特性。这部分的基本意思是:检查它是否是带有任何请求的XmlGet\XmlDelete
方法implicit
listStringToSuper和listServeMagic
Scala的一个很好的小功能是许多二进制操作(例如
f(x,y)
)可以从中缀位置xfy
调用。这适用于正常的方法调用:
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
/unplyseq
:
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")
}
所以在这种情况下,这里的语法是:
case "open" :: Nil XmlGet _ =>
同:
case XmlGet("open" :: Nil, _) =>
\uuu
忽略了Req
参数,该参数是TestGet返回值的第二部分。不适用于这是某种局部函数。我建议去RuleHelper类并在那里寻找隐藏的隐式。在gitter房间回答。它的语法与\::Nil
相同。