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
PartialFunction每次进行这样的基本操作时,您不希望创建并具有函数调用.
尾部呼叫match成为非尾部呼叫matchy.
这正是JIT难以内联的那种变形调用.matchy可以明确地做出来@inline.
一般来说,你失去了很多优化机会.
我错过的原因可能更多......
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |