部分適用・メソッド呼びだしの syntax suger・デフォルト引数
メモメモ。簡単な Singleton Logger を実装してみる
//#!scala
object Logger {
var level = 0
def log (message: String, level: Int) {
if (this.level <= level) {
println(message)
}
}
def log (message: String):Unit = log(message, 1)
def debug = log(_: String, 0);
def info = log(_: String, 1);
def warn = log(_: String, 2);
def error = log(_: String, 3);
def fatal = log(_: String, 4);
// この例の場合はこうしたほうがいい気がする
// def log (message: String):Unit = info
}
Logger.level = 1
Logger debug "debug"
Logger info "info"
Logger warn "warn"部分適用は _ と型さえ書けばいいっぽい? 引数の順番に制限はないようだ
Logger foo arg は Logger.foo(arg) の syntax sugar らしい。引数一つのときに省略ができるというルールではなくて、レシーバも含めた syntax sugar のようだ
デフォルト引数は Ruby とかのように仮引数に書くことはできなくて、overload で定義するっぽい。このとき overload する側のメソッドは、返り値の型の宣言が必要らしい