Scala:如何使用不包含匹配关键字的大小写关键字?

问题描述 投票:4回答:2

我写了一个用于测试的代码:

class A extends JavaTokenParsers {
    def str: Parser[Any] = stringLiteral ~ ":" ~ stringLiteral ^^ 
                    { case x ~ ":" ~ y => (x, y) }    //how to use case keyword like this?
}

object B extends A with App{
    val s = """
            "name": "John"
            """
    println(parseAll(str, s))
}

我阅读了Scala第二版中的编程的“第15章:案例类和模式匹配”,但是我从未见过像这样使用case

... ^^ { case x ~ ":" ~ y => (x, y) } 

不是match

关键字,但是^^看起来像match。我知道部分函数并且可以通过这种方式使用case
object C extends App {
    def a(f: Int => Int) = {
        f(3)
    }
    a(x => x + 1)
    a { case x => x + 1 }
}

但是它们都不同:

  1. ^^函数,例如match,可以使用^^之前的内容与case之后的内容进行匹配
  2. case
  3. 在^^函数中可以使用function(例如

    如何编写类似^^的自定义函数?你能写一个具体的例子吗?非常感谢!

我写了一段测试代码:类A扩展了JavaTokenParsers {def str:Parser [Any] = stringLiteral〜“:”〜stringLiteral ^^ {case x〜“:”〜y =>(x,y)} / / ...

scala pattern-matching
2个回答
6
投票

只是语法糖。在scala中,可以使用任何将单个参数用作二进制运算符的方法。


2
投票

如您所提到的,您可以使用带有case关键字的块来创建部分函数。

© www.soinside.com 2019 - 2024. All rights reserved.