代码之家  ›  专栏  ›  技术社区  ›  italktothewind

Scala-函数apply vs match子句

  •  3
  • italktothewind  · 技术社区  · 8 年前

    Scala代码a)运行良好:

    val f : Function[String, String] = { case "a" => "b"}
    f.apply("a") //returns "b"
    

    与b)相同)

    "a" match { case "a" => "b" } //returns "b"
    

    1) b)中的match子句是a的语法糖吗?

    2) 为什么这不起作用。。。?

    { case "a" => "b"}.apply("b") //Does not compile
    

    谢谢

    1 回复  |  直到 8 年前
        1
  •  6
  •   jkinkead    8 年前

    答案:

    1. a)是模式匹配匿名函数(Scala语言规范第8.5节),而b)是模式匹配表达式(Scala语言规范第8.4节)。它们有细微的不同。

    2. 这不起作用,因为它需要一个类型作为函数进行解析。可以使其与类型注释一起使用:

      ({ case "a" => "b"}: PartialFunction[String, String]).apply("b")

    推荐文章