English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala 함수 전달명 호출

Scala 함수

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를 반환합니다.

Scala 함수