通过名称和价值澄清来打电话

时间:2014-04-05 17:31:56

标签: scala

在Scala中,以下表达式是否采用相同数量的步骤,无论您是按名称还是按值计算它们?

coursera scala lecture1.2 - 编程元素 - 表示两者都应采用相同的步骤,我在“按名称调用”中获得一个额外步骤,如下所示:

def test(x  : Int, y : Int)  = x *x

表达式:test(2+3, 3*4)

按值调用:(3个步骤)

test(5, 12)

5*5

25

按姓名拨打电话:(4个步骤)

(2+3) * (2+3)

5 * (2+3)

5 * 5

25

1 个答案:

答案 0 :(得分:2)

不要忘记在按值调用的情况下,需要在调用函数之前计算值:

// call-by-value
test(2+3, 3*4)
test(5, 3*4)
test(5, 12)
5*5
25

// call-by-name
test(2+3, 3*4)
(2+3)*(2+3)
5*(2+3)
5*5
25