我在 David Pollak 的“Beginning Scala”
中看到了一个延迟
示例。我试图通过反复试验来适应这一点。这是我所拥有的:
def sayhello() = {
println("hello")
}
def delaying(t: => Unit):Unit = {
println("before call")
t
println("after call")
}
delaying(sayhello())
您将如何延迟带有参数的函数/方法?为什么我在调用 t
时不能使用括号?在哪里可以找到有关延迟函数的更多文档?
最佳答案
t
不必是函数值。它只是任何计算结果为 Unit
的按名称传递的值。
当您在 delaying
函数中声明 t
时,您并未显式调用作为该参数传递的函数。通过声明它,您将强制对按名称传递的参数进行求值,这意味着 sayhello()
在此时进行求值。
没有理由不能在按名称传递参数的函数中使用参数:
def say(word: String) {
println(word)
}
def delaying(t: => Unit) {
println("before call")
t
println("after call")
}
delaying(say("hello"))
唯一一次将参数附加到延迟
内的t
是它的返回类型(不是Unit
而是)一个函数输入参数。
关于scala - 如何定义接受带有参数的函数的延迟(按名称)参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1909026/