我偶然发现scala可以推断某些方法参数的类型。 但我不明白确切的规则。有人可以解释我为什么test1方法工作以及为什么test2方法不起作用
object Test {
def test1[A]: A => A = a => a
def test2[A]: A = a
}
我无法找到问题的好标题,因为我不明白这两行中发生了什么。 你有什么想法吗?
答案 0 :(得分:5)
def test1[A]: A => A = a => a
|____| |____|
the return type an anonymous function
(a function from A to A) (`a` is a parameter of this function)
def test2[A]: A = a
| |
the return type an unbound value
(A) (i.e. not in scope, a is not declared)
问题在于,在第一个示例中,a
是匿名函数的参数,而在第二个示例中,a
从未声明。
答案 1 :(得分:2)
test1
是一个不接受任何输入并返回函数A => A
的方法。名称a
是作为函数的imput参数给出的,函数simple reutrns a
是它的输入。
test2
是一个不带输入的方法返回类型A
的值。该方法被定义为返回名为a
的变量,但该变量从未被声明,因此您会收到错误。您可以将方法重新定义为def test2[A](a: A): A = a
并且它会起作用,因为现在a
已被声明为类型A
的变量,它是方法的参数。