scala如何推断方法的参数

时间:2017-07-31 13:07:11

标签: scala

我偶然发现scala可以推断某些方法参数的类型。 但我不明白确切的规则。有人可以解释我为什么test1方法工作以及为什么test2方法不起作用

object Test {
  def test1[A]: A => A = a => a
  def test2[A]: A = a
}

我无法找到问题的好标题,因为我不明白这两行中发生了什么。 你有什么想法吗?

2 个答案:

答案 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的变量,它是方法的参数。