10

以下のscala宣言の意味:

type MyType = Int => Boolean

これが私の理解です:

新しい型「MyType」を宣言していますが、高階関数「Int=>Boolean」の意味は何ですか

4

2 に答える 2

14

新しいタイプのエイリアスを宣言するほど、新しいタイプを宣言することはありません。それらはまだ同じタイプです:しかし、エイリアスはあなたがそれをもう少し簡潔に書くことを可能にします。

Int => Boolean1つの引数Intを取り、ブール値を返す関数の型です。

たとえば、「5より大きい」のような関数のタイプは次のようになりInt => Booleanます。

type MyType = Int => Boolean
val greaterThan5: MyType = (x: Int) => x > 5
greaterThan5(7)  // true
于 2012-09-28T09:48:52.473 に答える
3

正解です。次のようにコンパイルされます。

type MyType = Int => Boolean
def positive(x: Int) = x > 0
val fun: MyType = positive
fun(42)  //yields true

ここで、型エイリアスを宣言して、関数を取得して返す関数とMyType同等であることを示します。次に、そのような宣言に一致するメソッドを作成します。最後に、このメソッドを型の変数に割り当てます。コンパイルして問題なく動作します。IntBooleanMyType

これは単なるエイリアスであり、新しいタイプではないことに注意してください。

trait MyType2 extends (Int => Boolean)
val fun2: MyType2 = positive _
error: type mismatch;
 found   : Int => Boolean
 required: MyType2
       val fun2: MyType2 = positive _
                           ^
于 2012-09-28T09:49:57.050 に答える