5

パターンマッチとそれに対応するバイトコードについて調べてみました。

val a = Array(1,2,3,4)
a.map {
  case i => i + 1
}

上記のコードでは、javap を使用して、マップ内の無名関数のバイト コードを取得しました。

public int apply$mcII$sp(int);
Code:
   0: iload_1       
   1: istore_2      
   2: iload_2       
   3: iconst_1      
   4: iadd          
   5: ireturn       

したがって、0 行目で int (パラメーター) をプッシュし、1 行目で int をロードし、2 行目でそれをプッシュバックするように思えます...ここでの目的は何ですか?

ありがとう!

4

2 に答える 2

2

おい、試してみてください-optimise

  public int apply$mcII$sp(int);
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
         0: iload_1       
         1: iconst_1      
         2: iadd          
         3: ireturn 

使用する

scala> :javap -prv -

そして、次のようなもの

scala> :javap -prv $line4/$read$$iw$$iw$$anonfun$1
于 2013-10-15T14:32:40.627 に答える