为什么重载方法需要显式结果类型?

时间:2016-06-30 21:16:36

标签: scala overloading

我知道,这更像是一个咆哮而不是一个问题,所以如果你不感到我的痛苦就投票结束。但这太烦人了。

我认为,如果有人能够合理地向我解释为什么实际需要这个要求,它会减轻我每次收到此错误时所感受到的压力。

我(有点)在递归方法的情况下得到它,但重载的特别之处是什么?

1 个答案:

答案 0 :(得分:0)

只有在调用具有相同名称的方法时,才需要显式地注释重载方法的返回类型。

E.g。在这种情况下,您必须注释第二个foo

def foo(x: Int, y: Int) = x + y
def foo(x: Int): Int = foo(x, 42) // return type is mandatory

但在这种情况下你不会

def foo(x: Int, y: Int) = x + y
def foo(x: Int) = x + 42

我只是在这里推测,但它看起来非常类似于递归调用情况,因为它遵循相同的精神。类型推理器在本地工作,当它看到它看起来像递归调用(在这种情况下调用具有相同名称的方法)时,它会停止并请求显式类型。

我认为两种情况(递归调用和重载调用)都源于类型推断算法的局部性质,它不会逃避方法定义的界限来推断它的类型。