def
と に適用すると、Scala の型推論に違いが見られましたval
。
を使用して、 type の値を返すdef
抽象 nullary メソッドを定義できます。関数リテラルを使用して実装する場合、パラメーターの型を指定する必要はありません。コンパイラーによって推論できるためです。const
Int => Int
const
trait D {
def const: Int => Int
}
object D extends D {
def const = i => i + 1
}
これで問題ありません。(欠点として、へのアクセスごとに新しい関数インスタンスが作成されますD.const
。)
を使用して類似の構造を考えてみましょうval
。
trait V {
val const: Int => Int
}
object V extends V {
val const = i => i + 1
}
これはコンパイルされず、失敗します
error: missing parameter type
val const = i => i + 1
^
なんで?