2017-07-31 71 views
1

我注意到scala可以推斷某些方法參數的類型。 但我不明白確切的規則。有人可以解釋我爲什麼test1的方法工作,爲什麼test2的方法不起作用scala如何推斷方法的參數

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從不聲明。

2

test1是一種不接受輸入並返回函數A => A的方法。名稱a作爲函數的輸入參數給出,函數簡單重載a,它是輸入。

test2是一種不接受任何輸入的方法,返回類型爲A的值。該方法被定義爲返回名爲a的變量,但該變量從未被聲明過,因此會出現錯誤。您可以將方法重新定義爲def test2[A](a: A): A = a並且它可以工作,因爲現在a已被聲明爲A類型的變量,它是該方法的參數。