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
    相同。