您的位置:首页 > 其它

A simple Scala call-by-name example

2016-01-05 16:34 393 查看
Here's a simple Scala call-by-name example. I'll show the normal approach to writing a method and passing in a parameter, and then show a call-by-name (pass by name) example.

1) A "normal" Scala method

Here I show how to pass a parameter to a method "normally", i.e., call by value:object Test extends App {

def time(): Long = {
println("In time()")
System.nanoTime
}

def exec(t: Long): Long = {
println("Entered exec, calling t ...")
println("t = " + t)
println("Calling t again ...")
t
}

println(exec(time()))

}
The output looks like this:In time()
Entered exec, calling t ...
t = 1363909521286596000
Calling t again ...
1363909521286596000
As expected, the values for 
t
 are the same. This is because the value of 
t
 is determined when this line is invoked:println(exec(time()))

2) A call by name example

Next, make the method parameter a call by name parameter:object Test extends App {

def time() = {
println("Entered time() ...")
System.nanoTime
}

// uses a by-name parameter here
def exec(t: => Long) = {
println("Entered exec, calling t ...")
println("t = " + t)
println("Calling t again ...")
t
}

println(exec(time()))

}
This time the output is different:Entered exec, calling t ...
Entered time() ...
t = 1363909593759120000
Calling t again ...
Entered time() ...
1363909593759480000
The two 
t
 invocations yield different results. As stated in the Scala language specification, this is because:“This indicates that the argument is not evaluated at the point of function application, but instead is evaluated at each use within the function. That is, the argument is evaluated usingcall-by-name.”That's a simple call by name example in Scala.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala