scala はどのようにmatch
ing を処理しますか? バイトコード レベルでコンパイラ ブランチに変換されるのは単なるシンタックス シュガーですか、それとも隠れた巧妙なトリックですか?
質問する
222 次
1 に答える
3
定数に対する整数値 (例: Int、Char) のマッチングは、通常、TableSwitch (配列のインデックス付けによる O(1) ルックアップ時間) または LookUpSwitch (二分探索による O(log n) ルックアップ時間) バイトコード命令に変換されます。これは、キャッチオール ブランチとして可変パターンまたはワイルドカード パターンがある場合にも当てはまります。
@switch アノテーションを使用して、これが実際に行われることを確認できます。
非整数値の場合、使用できる最適化はいくらか制限されます。ただし、コンパイラ コードを理解している限り、コンパイラは少なくとも共通のサブ条件 (記憶している) と共有プレフィックスをチェックします。
于 2013-04-10T22:20:52.337 に答える