English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Scala 인터프리터는 함수 파라미터(function arguments)를 해석할 때 두 가지 방식이 있습니다:
전달명 호출(call-by-value):파라미터 표현식의 값을 먼저 계산한 후 함수 내부에 적용합니다;
전달명 호출(call-by-name):계산되지 않은 파라미터 표현식을 함수 내부에 직접 적용합니다
함수 내부에 진입하기 전에 전달명 호출 방식은 파라미터 표현식의 값을 계산한 후 이미 전달명 호출 방식이 함수 내부에서 파라미터 표현식의 값을 계산합니다.
이는 전달명 호출을 사용할 때마다 인터프리터가 표현식의 값을 계산하는 현상을 초래합니다.
object Test { def main(args: Array[String]) { delayed(time()); } def time() = { println("시간을 얻기,단위는 나노초") System.nanoTime } def delayed(t: => Long) = { println("delayed 메서드 내에서") println("파라미터: " + t) t } }
위 예제에서 delayed 메서드를 선언했습니다. 이 메서드는 변수 이름과 변수 타입에서 => 기호를 사용하여 전달명을 설정합니다. 위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test delayed 메서드 내에서 단위는 나노초 파라미터: 241550840475831 단위는 나노초
예제에서 delay 메서드는 이 메서드에 진입하였음을 나타내는 메시지를 출력한 후, delay 메서드는 받은 값을 출력하고 마지막으로 t를 반환합니다.