2017-07-13 6 views
0

メソッドと関数の違いを学んでいます。メソッドの理解スカラーのVs関数

class test { 
def m1(x:Int) = x+3 
val f1 = (x:Int) => x+3 
} 

我々は二つのファイル 1. test.class 2.テスト$$ anonfun $ 1を取得する必要があります。私は、このリンク

http://jim-mcbeath.blogspot.co.uk/2009/05/scala-functions-vs-methods.html

資料では、次のコードをコンパイルする場合は言うが、次のい.class

しかし、私はそれを取得しません。第二の例では、我々はREPLで次のコマンドを実行した場合、我々は

scala> val f1 = (x:Int) => x+3 
f1: (Int) => Int = <function> 

の下を取得すると言うしかし、私はこれだけ

scala> val f1 = (x:Int) => x+3 
f1: Int => Int = $$Lambda$1549/[email protected] 

を取得し、我々は異なるバージョンを使用しているので、それか?助けてください。

+2

はい、以前のバージョンのScala(およびREPL)では、結果の表現が「」になります。 – jwvh

+0

このような実装の詳細を決して*決して*使うべきではありません。たとえば、明らかな理由から、Scala.jsは常にecactly * zero *クラスファイルを生成します。 –

答えて

2

Scala 2.11およびそれ以前のバージョンは、ブログの投稿に示されているように動作します。

動作がScala 2.12で変更されました。 Scalaは、JVMのバージョン8に追加されたラムダサポートを使用するため、余分な.classファイルを発行する必要はありません。その結果、2.12で作成された.jarファイルは、通常、かなり小さくなります。

これの副作用として、ScalaはtoStringをもうオーバーライドできないため、lambda用の標準JVM toString出力が表示されます。