2016-03-20 8 views
0

私はScalaの評価戦略についてお話ししています。
私は、次のコードがある場合はそう:今には、スカラが評価戦略を実行するステップ数を見つける方法があります

def doSomething(x:Int,y:Int) = x + x 

を私はこの関数を呼び出す場合:

doSomethingの(1 + 2,3 + 4)

評価ステップうbe:

Step 1 :: doSomething(3,3+4) 
Step 2 :: doSomething(3,7) 
Step 3 :: 3 + 3 
Step 4 :: 6 

これらの私のような初心者が評価ステップを理解し、「価値によって」と「名前で」を比較するのに役立つ、評価ステップを印刷することができます。

+0

**の定数値**は、コンパイル時に評価されます。実行時に評価するステップがあります。 – chengpohi

+0

コンパイル時にマクロを使ってツリーを調べることができます – jilen

+0

"ステップ" 3と4は何ですか? – Dima

答えて

0

実際にはありません。あなたの例では、コンパイラによって定数が折りたたまれ、JVMは名前による呼び出しをネイティブにサポートしていないため、コンパイラは名前パラメータを引数なしの関数に変換します。

def doSomething(x:() => Int,y:() => Int) = x() + y()

doSomething(() => 3,() => 7)などのコール:だから絵を簡素化するために、単に名前による機能に包まれているようなパラメータと考えます。

0

このラムダ微積分スタイルの評価は、言語の意味を説明するのに便利なツールですが、実際にはに対応していないため、Scalaでは存在しない可能性があります。JVM Scalaコンパイラによって生成されたバイトコードを評価します。

関連する問題