0
スカラ - 部分的に適用される関数。 部分的に適用される関数の使い方とその動作方法スカラ - 部分的に適用される関数
部分適用機能に変換したい。
def log(date: Date, message: String) = {
println(date + "----" + message)
}
スカラ - 部分的に適用される関数。 部分的に適用される関数の使い方とその動作方法スカラ - 部分的に適用される関数
部分適用機能に変換したい。
def log(date: Date, message: String) = {
println(date + "----" + message)
}
関数を呼び出すと、引数に関数を適用していると言われます。期待される引数をすべて渡したら、それを完全に適用したことになります。いくつかの引数だけを送信すると、部分的に適用された関数が返されます。これにより、いくつかの引数を束縛し、後で残りの部分を埋めるのが便利になります。
例 :log()メソッドは、dateとmessageの2つのパラメータをとります。このメソッドを複数回呼び出すには、dateの値は同じで、messageの値は異なります。その引数をlog()メソッドに部分的に適用することで、各呼び出しに日付を渡すというノイズを排除できます。これを行うには、最初に日付パラメーターに値をバインドし、その場所にアンダースコアを挿入して、2番目のパラメーターをバインド解除したままにします。その結果、部分的に適用された関数が変数に格納されます。
object Demo {
def main(args: Array[String]) {
val date = new Date
val logWithDateBound = log(date, _ : String)
logWithDateBound("message1")
Thread.sleep(1000)
logWithDateBound("message2")
Thread.sleep(1000)
logWithDateBound("message3")
}
def log(date: Date, message: String) = {
println(date + "----" + message)
}
}
次の例を試してみてください