为什么匹配关键字而不是Scala中的函数?

Lle*_*lis 5 scala pattern-matching

我不明白为什么Scala已经match定义为关键字而不是函数.它可以通过含义(如ArrowAssoc)来定义.例如,请考虑以下内容.

  implicit class Matchy[A](a: A) {

    def matchy[T](pf: PartialFunction[A, T]): T = pf(a)
  }

  val myVar = 10
  val myString = myVar matchy {
    case 5 => "five"
    case 10 => "ten"
    case x => x.toString
  }

  println(myString) // Prints "ten".
Run Code Online (Sandbox Code Playgroud)

这将释放匹配作为变量名称,并暗示case可以在匹配块之外使用的事实.

那么为什么Scala定义match为关键字?

Ale*_*nov 10

  1. PartialFunction每次进行这样的基本操作时,您不希望创建并具有函数调用.

  2. 尾部呼叫match成为非尾部呼叫matchy.

  3. 这正是JIT难以内联的那种变形调用.matchy可以明确地做出来@inline.

  4. 一般来说,你失去了很多优化机会.

我错过的原因可能更多......