English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Scala 부분 적용 함수는 모든 매개변수를 제공하지 않아도 됩니다. 필요한 부분만 제공하거나 필요한 매개변수를 제공하지 않습니다.
다음 예제에서, 우리는 로그 정보를 출력합니다:
import java.util.Date object Test { def main(args: Array[String]) { val date = new Date log(date, "message1" ) Thread.sleep(1000) log(date, "message2" ) Thread.sleep(1000) log(date, "message3" ) } def log(date: Date, message: String) = { println(date + "----" + 메시지) } }
위 코드를 실행하면 다음과 같은 결과가 출력됩니다:
$ scalac Test.scala $ scala Test Mon Dec 02 12:52:41 CST 2018----메시지1 Mon Dec 02 12:52:41 CST 2018----메시지2 Mon Dec 02 12:52:41 CST 2018----메시지3
예제에서 log() 메서드는 두 개의 매개변수를 받습니다: date와 message. 프로그램 실행 시 세 번 호출했고, date의 값은 모두 동일하지만, message는 다릅니다.
위 메서드를 최적화할 수 있습니다. 첫 번째 date 매개변수를 부분 적용하고, 두 번째 매개변수는 밑줄 (_)로 누락된 매개변수 목록을 대체하여 새로운 함수 값을 변수에 할당합니다. 다음과 같이 수정할 수 있습니다:
import java.util.Date object Test { 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 + "----" + 메시지) } }
위 코드를 실행하면 다음과 같은 결과가 출력됩니다:
$ scalac Test.scala $ scala Test Tue Dec 18 11:25:54 CST 2018----메시지1 Tue Dec 18 11:25:54 CST 2018----메시지2 Tue Dec 18 11:25:54 CST 2018----메시지3