这个咖喱版本运行正常。链接到Scastie View code in action
def foo(a: Int)(b: Int = a-1): Int = a + b
foo(9)()
但是这个版本会抛出Error not found值a。链接Scastie。 View code in action
def bar(a: Int, b: Int = a-1): Int = a+b
bar(9)
这是一个实际错误,还是有任何原因导致它无效?
答案 0 :(得分:2)
虽然按顺序(在函数体之前)评估参数,但bar
失败,因为a
不在其自己的参数列表范围内。
参数的范围仅对后续参数列表公开。
def foo(a: Int)(b: Int = a - 1)(c: Int = b + a) = a + b + c
foo(9)()()
// 34