Don';我不明白Scala闭包是如何工作的
这里怎么了? 我创建了一个函数closureDemo,它接受另一个函数,该函数不接受任何参数,也不返回任何内容。 当我调用closureDemo时,我传递了一个符合此条件的函数。 但是我没有得到预期的输出。我期望得到以下结果:-Don';我不明白Scala闭包是如何工作的,scala,functional-programming,closures,Scala,Functional Programming,Closures,这里怎么了? 我创建了一个函数closureDemo,它接受另一个函数,该函数不接受任何参数,也不返回任何内容。 当我调用closureDemo时,我传递了一个符合此条件的函数。 但是我没有得到预期的输出。我期望得到以下结果:- This is a demo application this is a demo for closure 但只有第一行被打印出来。 有人能解释一下这是怎么回事吗 object ScalaApp { def main(args:Array[String]): U
This is a demo application
this is a demo for closure
但只有第一行被打印出来。
有人能解释一下这是怎么回事吗
object ScalaApp {
def main(args:Array[String]): Unit = {
println("This is a demo application")
closureDemo {
() => println("this is a demo for closure")
}
}
def closureDemo(op: => Unit) = {
op
}
}
谢谢
Amar这是因为closureDemo采用了一个by-name参数。 在主函数中的closureDemo调用中,您只是创建/定义了一个无参数函数,而不是调用它。因此,通过强制计算新创建的函数,您可以得到预期的结果
closureDemo {
(() => println("this is a demo for closure")).apply()
}
或者,您也可以简单地调用,因为closureDemo的输入不是函数,而是按名称参数(代码块)
这是因为closureDemo采用了一个by-name参数。 在主函数中的closureDemo调用中,您只是创建/定义了一个无参数函数,而不是调用它。因此,通过强制计算新创建的函数,您可以得到预期的结果
closureDemo {
(() => println("this is a demo for closure")).apply()
}
或者,您也可以简单地调用,因为closureDemo的输入不是函数,而是按名称参数(代码块)
op
参数closureDemo
是按名称调用的,这意味着在调用它之前不会对其进行计算。这很好,因为您正在调用它,但是,在main
中,您正在传递()=>println(…)
,这是一个参数为零的函数。在closureDemo
的主体中,对op
的调用返回一个函数,但不调用该函数
如果希望closureDemo
保持按名称调用,则不应向其传递函数,如下所示:
closureDemo(println("this is a demo for closure"))
如果您只想传递带有零参数的closureDemo
函数,则其签名应反映:
def closureDemo(op: () => Unit) = {
op()
}
op
参数closureDemo
是按名称调用的,这意味着在调用它之前不会对其进行计算。这很好,因为您正在调用它,但是,在main
中,您正在传递()=>println(…)
,这是一个参数为零的函数。在closureDemo
的主体中,对op
的调用返回一个函数,但不调用该函数
如果希望closureDemo
保持按名称调用,则不应向其传递函数,如下所示:
closureDemo(println("this is a demo for closure"))
如果您只想传递带有零参数的closureDemo
函数,则其签名应反映:
def closureDemo(op: () => Unit) = {
op()
}
还应该注意的是,这里实际上没有使用任何闭包,只有不引用任何外部变量的函数。我接受了这个答案。谢谢你的解释我以为我在用闭包,但我想我最终会用到闭包的。还应该注意的是,这里没有真正使用的闭包,只有不引用任何外部变量的函数。我接受了这个答案。谢谢你的解释。我以为我在使用闭包,但我想我最终会达到目的。这与公认的答案是一致的。谢谢你帮我。这与公认的答案是一致的。谢谢你帮助我。