有没有办法找到scala执行评估策略的步骤数
我正在阅读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中是否有一种方法可以打印这些求值步骤?这将帮助像我这样的新手理解求值步骤并比较“按值”和“按
因此,如果我有以下代码:
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谢谢-需要检查“宏”和“树”-不知道这些