https://scastie.scala-lang.org/webserver3315/Qic3rLZDQYaDvYCEL6DZlg/13
def doubles(x: => Int) = {
println("Now doubling " + x)
x*2
}
def doubles2(x:Int) = {
println("Now doubling2 " + x)
x*2
}
def f(i:Int) = {
println(s"Hello from f($i)")
i
}
val result = doubles(f(8))
println(s"result is $result")
println("===================")
val result2 = doubles2(f(8))
println(s"result2 is $result2")
결과
Hello from f(8)
Now doubling 8
Hello from f(8)
result is 16
===================
Hello from f(8)
Now doubling2 8
result2 is 16
doubles는 name에 의한 argument를 받았고,
doubles2는 value에 의한 argument를 받았다.
이 때, 전자의 경우는 함수가 정말 그대로 넘어가기 때문에(단순한 값이라면 후자와 동일하지만), evaluation될 때마다 해당 함수가 "호출"된다.
따라서, Hello from f(8)이라는 문장이 한 번 더 출력되는 것을 확인할 수 있다.
어떻게 쓸 지 알 수 없는 기능이나, 일단 함수형 프로그래밍의 특징같아서 기록한다.