函数参数中的错误未找到值引用其他函数参数

时间:2018-02-18 03:56:15

标签: scala

这个咖喱版本运行正常。链接到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)

这是一个实际错误,还是有任何原因导致它无效?

1 个答案:

答案 0 :(得分:2)

虽然按顺序(在函数体之前)评估参数,但bar失败,因为a不在其自己的参数列表范围内。

参数的范围仅对后续参数列表公开。

def foo(a: Int)(b: Int = a - 1)(c: Int = b + a) = a + b + c 
foo(9)()()
// 34