Scala - 函数应用vs匹配子句

ita*_*ind 3 scala

这个Scala代码a)效果很好:

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

和b)相同

"a" match { case "a" => "b" } //returns "b"
Run Code Online (Sandbox Code Playgroud)

1)b)中的匹配子句是a)的句法糖吗?

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

{ case "a" => "b"}.apply("b") //Does not compile
Run Code Online (Sandbox Code Playgroud)

谢谢!

jki*_*ead 6

回答:

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

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

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