当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Scala:如何使用不带匹配关键字的大小写关键字?》经验,为你挑选了1个好方法。

我写了一段测试用的代码:

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 Second Edition中阅读了编程的 "第15章:案例类和模式匹配" ,但我从未见过这样的案例:

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

它不是匹配关键字,但^^看起来像匹配.我知道部分功能,我可以通过这种方式使用案例:

object C extends App {
    def a(f: Int => Int) = {
        f(3)
    }
    a(x => x + 1)
    a { case x => x + 1 }
}

但他们都是不同的:

    ^^功能像匹配,其可在使用前内容^^后面匹配的内容的情况下

    情况下在^^函数可以使用功能(如)

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



1> Gabriele Pet..:

这只是语法糖.在scala中,您可以使用任何将单个参数作为二元运算符的方法.

例:

class Foo(x: String) {
  def ^^(pf: PartialFunction[String, Int]): Option[Int] =
    if (pf.isDefinedAt(x)) Some(pf(x)) else None
}

val foo = new Foo("bar")
foo ^^ {
  case "baz" => 41
  case "bar" => 42
}

// result: Some(42)

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有