2012-02-28 4 views
6

PartialFunctionorElseの使用は、applyの時間中に大きなmatchブロックを使用するよりも多かれ少なかれ効率的ですか?質問を説明するためにパーシャルファンクションまたはエールスの効率

は、次のとおりです。pfへの適用時に

val pf = { case "a" => "A" 
    case "b" => "B" 
    case "c" => "C" 
    ... 
} 

値:

よりも多かれ少なかれ効率的
val pf = { case "a" => "A"} orElse 
     { case "b" => "B" } orElse 
     { case "c" => "C" } ... 

pf(x) 
+1

「orElse」の効率が悪い場合でも、コードクリーナーを作成できるときには、それを使用しないことを正当化することはあまり効率的ではありません。それは、あなたが与える例は人工的であると言われています(私はそれを批判していません)。後者の例は、それらの非常に似たような場合を打破する正当な理由がないためです。 –

答えて

5

がこのdetailed analysisを参照してください。著者:unfiltered。基本的に効率が悪いです。私はsome workがブログ投稿が作成された直後にこれに対処するためにトランクで行われたと信じています。

1

コンパイラが最初のものに変換するだけで、実際にはそれが仮想パターンマッチャーとはまったく異なるわけではないので、2番目の場合は最初の場合よりも効率的ではありません。

あなたが選択すれば、2番目のケースは常により安全です。

関連する問題