我正在阅读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中是否有一种方法可以打印这些评估步骤 - 这将有助于我这样的新手了解评估步骤并比较'按值'和'按名称'
答案 0 :(得分:0)
不是,不。在您的示例中,常量将由编译器折叠,并且由于JVM本身不支持按名称调用,因此编译器还将按名称参数转换为不带参数的函数。因此,为了简化图片,只需将by-name参数视为包含在函数中:
def doSomething(x: () => Int,y: () => Int) = x() + y()
和调用
doSomething(() => 3, () => 7)
。
答案 1 :(得分:0)
Scala可能不存在这样的工具,因为这种lambda演算风格评估虽然是描述语言语义的有用工具,但却与实际上的不对应当JVM评估Scala编译器生成的字节码时,在幕后进行。