Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 部分函数orElse的效率_Scala - Fatal编程技术网

Scala 部分函数orElse的效率

Scala 部分函数orElse的效率,scala,Scala,在应用期间,使用部分功能或LSE是否比使用大型匹配块效率更高或更低 举例来说,问题是: val pf = { case "a" => "A"} orElse { case "b" => "B" } orElse { case "c" => "C" } ... 效率高于或低于: val pf = { case "a" => "A" case "b" => "B" case "c" => "C" ... }

应用
期间,使用
部分功能
或LSE是否比使用大型
匹配
块效率更高或更低

举例来说,问题是:

val pf = { case "a" => "A"} orElse 
         { case "b" => "B" } orElse 
         { case "c" => "C" } ...
效率高于或低于:

val pf = { case "a" => "A"
  case "b" => "B"
  case "c" => "C"
  ...
}
在应用过程中,将一个值应用到
pf

pf(x)

请参见本书的作者。基本上效率较低。我相信在这篇博文发表后不久,trunk已经做了一些工作来解决这个问题

第二种情况的效率不可能低于第一种情况,因为编译器可以将其转换为第一种情况(事实上,这与虚拟模式匹配器的功能相差不远)


因此,如果你有选择的话,第二种情况总是更安全的选择。

即使
orElse
效率较低,当它可以让你的代码更干净时,不使用它也可能不是那么低效。话虽如此,你给出的例子是人为的(这很好,我不是在批评):在那种情况下,后一个例子更可取,因为没有很好的理由将这些非常相似的案例分解。