2017-07-31 8 views
1

私は偶然、スカラーがメソッドのパラメーターの型を推測できることに気付きました。 しかし、私は正確なルールを理解していません。誰かがなぜtest1の方法仕事を私に説明でき、なぜTEST2方法は、私はこの二行で何が起こっているのか理解していないので、私は私の質問のために良いタイトルを見つけることができませんスカラー推論メソッドのパラメーター

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

を動作しません。 ご存知ですか?

+0

あなたの質問は不明です。 2つの方法のいずれも、いずれのパラメータも持たない。ここでは何も推定されていません。 –

答えて

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) 

落とし穴は、第2実施例aで宣言されることはないのに対し、実施例1でaは、匿名関数のパラメータであることです。

2

test1は入力を受けずに関数A => Aを返すメソッドです。 aという名前はfuntionのimputパラメータとして与えられ、関数は単純なreutrns aと入力されます。

test2は、入力を受け付けないメソッドで、タイプがAの値を返します。このメソッドは、aという名前の変数を返すように定義されていますが、その変数は決して宣言されていないので、エラーが発生します。メソッドdef test2[A](a: A): A = aを再定義すると、今度はaA型の変数として宣言されているので、メソッドのパラメータになります。