Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法找到scala执行评估策略的步骤数_Scala - Fatal编程技术网

有没有办法找到scala执行评估策略的步骤数

有没有办法找到scala执行评估策略的步骤数,scala,Scala,我正在阅读Scala的评估策略,如按值调用。 因此,如果我有以下代码: def doSomething(x:Int,y:Int) = x + x 现在如果我调用这个函数: 剂量测定法(1+2,3+4) 评估步骤将是: Step 1 :: doSomething(3,3+4) Step 2 :: doSomething(3,7) Step 3 :: 3 + 3 Step 4 :: 6 scala中是否有一种方法可以打印这些求值步骤?这将帮助像我这样的新手理解求值步骤并比较“按值”和“按

我正在阅读Scala的评估策略,如按值调用。
因此,如果我有以下代码:

def doSomething(x:Int,y:Int) = x + x  
现在如果我调用这个函数:

剂量测定法(1+2,3+4)

评估步骤将是:

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

scala中是否有一种方法可以打印这些求值步骤?这将帮助像我这样的新手理解求值步骤并比较“按值”和“按名称”不太可能。在您的示例中,编译器会折叠常量,而且由于JVM本身不支持按名称调用,编译器还将按名称参数转换为不带参数的函数。因此,为了简化图片,只需将按名称参数包装在函数中即可:

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

这些电话


doSomething(()=>3,()=>7)

对于Scala,这样的工具可能不存在,因为这种lambda演算风格的计算虽然是描述语言语义的有用工具,但与JVM计算Scala编译器生成的字节码时实际发生的情况不符。

对于常量值,它在编译时进行评估。因此,在运行时,有一些步骤可以对其进行评估。您可以在编译时使用宏检查树。什么是“步骤”3和4???@Dima-这些是评估的最后“步骤”happens@jilen谢谢-需要检查“宏”和“树”-不知道这些