Scala 2.8 からメソッドの引数にデフォルト値を指定できるようになりました。
Scala 2.7 系では引数にデフォルト値を用意したい場合は、
object StringUtil { def joiner(strings: List[String], separator: String): String = strings.mkString(separator) // デフォルトのセパレータを使うメソッド def joiner(strings: List[String]): String = joiner(strings, " ") }
メソッドをオーバーロードして joiner メソッドを 2 つ用意する必要がありました。
実行すると以下のようになります。
import StringUtil._ joiner(List("Programming", "Scala"), ":") // Programming:Scala joiner(List("Programming", "Scala")) // Programming Scala
ちなみにオーバーロード時の戻り値の省略は以下は可能ですが、
def joiner(strings: List[String], separator: String) = strings.mkString(separator) def joiner(strings: List[String]): String = joiner(strings, " ")
これはコンパイルエラーとなります。
def joiner(strings: List[String], separator: String) = strings.mkString(separator) def joiner(strings: List[String]) = joiner(strings, " ")
メソッドのデフォルト引数
2.8 ではメソッドのデフォルト引数が利用できるようになりました。上記 joiner メソッドは以下のように書くことができます。
object StringUtil { // separator のデフォルト値として " " を指定 def joiner(strings: List[String], separator: String = " "): String = strings.mkString(separator) }
もちろん実行結果は同一となります。
import StringUtil._ joiner(List("Programming", "Scala"), ":") // Programming:Scala joiner(List("Programming", "Scala")) // Programming Scala