2009年 05月 27日

部分適用・メソッド呼びだしの 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 argLogger.foo(arg) の syntax sugar らしい。引数一つのときに省略ができるというルールではなくて、レシーバも含めた syntax sugar のようだ

デフォルト引数は Ruby とかのように仮引数に書くことはできなくて、overload で定義するっぽい。このとき overload する側のメソッドは、返り値の型の宣言が必要らしい

gerry++

二日連続