scala/functional programming

1.3 평가 전략 및 종료

wefree 2024. 4. 4. 19:47

평가(Evaluation) 종료

  • call by value 로 expression 이 종료되면, call by name 으로도 expression 이 종료된다.
  • 그러나 call by name 으로 expression 이 종료된다고 해서, 항상 call by value 로 expression 이 종료되는 것은 아니다.

다음 예를 살펴보자

def loop: Int = loop 
def first(x: Int, y: Int) = x
  • call by value
first(1, loop)

x=1 과 loop 가 evaluation 되어 expression 이 종료되지 않는다.

 

  • call by name
first(1, loop)

x=1 만 evaluation 되어 (loop 는 evaluation 되지 않고) expression 이 종료된다.

 

 

scala 의 Evaluation

scala 에서는 기본적으로 call by value 가 적용된다.
call by name 을 사용하려면 아래의 y: => Int 처럼 표현하면 된다.

def loop: Int = loop 
def constOne(x: Int, y: => Int) = 1

constOne(1+2, loop)  // expression 이 종료됨, 결과: 3 
constOne(loop, 1+2)  // expression 이 종료되지 않음