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 이 종료되지 않음