2016-06-27 16 views
1
object Demo { 
    def main(args: Array[String]) { 
      println(apply(layout, 10)) 
    } 

    def apply(f: Int => String, v: Int) = f(v) 

    def layout[A](x: A) = "[" + x.toString() + "]" 
} 

私はScalaを初めて使い、上記のコードについて少し混乱しています。サンプルスカラー高次関数説明

私の理解から、applyは入力として別の関数と整数を取ります。 そして、vの整数を入力パラメータとしてfに渡します。 layout[A]の意味は?

答えて

2

構文

def layout[A](x:A) 

新しい汎用関数を宣言します。この場合、関数layoutはその唯一のパラメータで汎用的なものなので、layoutをANYの値で呼び出すことができ、それは正当なスカラになります。 Javaでは

これは、いくつかのクラスにメソッドとして記述されますが、構文は似ています

String layout<A>(A x) 

Twitter's Scala school has a good explanationタイプはScalaで使用されているかに。

+0

ありがとうございます。 –

1

タイプパラメータと呼ばれます。

def f(x: Int) = ....と記述すると、コンパイラはxへの以下のすべての参照に整数値が含まれることをコンパイラが認識するようになりました。

def f(x: A) = ....と書くと、コンパイラは「Aは何ですか?Aは何かわかりません!」と文句を言うでしょう。

あなたがdef f[A](x: A) = ....を記述する場合、コンパイラはxの実数型が提供される、またはfが呼び出されたときに、文脈から推測することができることを知っています。

+0

私は今それを得ました。ありがとう! –