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

时间:2016-03-20 13:16:12

标签: scala

我正在阅读Scala的评估策略 - 比如Call by Value 所以,如果我有以下代码:

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

现在,如果我调用此函数:

  

doSomething(1 + 2,3 + 4)

评估步骤如下:

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

scala中是否有一种方法可以打印这些评估步骤 - 这将有助于我这样的新手了解评估步骤并比较'按值'和'按名称'

2 个答案:

答案 0 :(得分:0)

不是,不。在您的示例中,常量将由编译器折叠,并且由于JVM本身不支持按名称调用,因此编译器还将按名称参数转换为不带参数的函数。因此,为了简化图片,只需将by-name参数视为包含在函数中:

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

和调用

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

答案 1 :(得分:0)

Scala可能不存在这样的工具,因为这种lambda演算风格评估虽然是描述语言语义的有用工具,但却与实际上的不对应当JVM评估Scala编译器生成的字节码时,在幕后进行。