basyura's blog

あしたになったらほんきだす。

名前渡しパラメータ

通常はファイル出力しないデバッグ用ログでも、メソッド呼び出しの際に toString で文字列生成されるので実は無駄にコストがかかっているという場合に使える(のか?)。

class Test {
  override def toString : String = {
    println("called Test#toString")
    "Hello World"
  }
}
def log1(msg: String) : Unit = {
  println("log start")
  println(msg)
  println("log end")
}
val t = new Test
// メソッドを呼び出したタイミングで文字列が生成される
log1(t.toString)

この場合、メソッド呼び出しの時点で文字列が生成される

called Test#toString
log start
Hello World
log end   

=> をつけて名前付きパラメータにしてみる

def log2(msg: => String) : Unit = {
  println("log start")
  println(msg)
  println("log end")
}

評価されるタイミングで文字列が生成される

log start
called Test#toString
Hello World
log end  

他つかいどころはなんだろう。