gpt4 book ai didi

scala - 带有 curry 功能的奇怪东西

转载 作者:行者123 更新时间:2023-12-04 10:30:12 24 4
gpt4 key购买 nike

我有这种奇怪的情况,我不明白。我正在阅读“Scala 编程”一书,Ch。 9.

假设我有一个 curry 函数:

def withThis(n:Int)(op:Int=>Unit){
println("Before")
op(n);
println("After")
}

当我在特殊的 curly-syntax 中使用一个参数调用它时,它按预期工作:
withThis(5){
(x) => {println("Hello!"); println(x); }
}
// Outputs
Before
Hello!
5
After

但是,如果我提出两个陈述,我会得到一些奇怪的东西:
withThis(5){
println("Hello!")
println(_)
}
// Outputs
Hello!
Before
5
After

“你好!”怎么来的?在“之前”之前打印,然后在里面打印“5”?我疯了吗?

最佳答案

您的最后一个代码示例应重写如下以产生预期结果:

withThis(5) { x =>
println("Hello!")
println(x)
}

否则,您的示例等效于
withThis(5) {
println("Hello!")
(x: Int) => println(x)
}

作为占位符 _将扩展为以非退化方式尽可能紧密地绑定(bind)(即,它不会扩展为 println(x => x) )。

另一件需要注意的是,一个 block 总是返回它的最后一个值。在您的示例中,最后一个值实际上是 (x: Int) => println(x) .

关于scala - 带有 curry 功能的奇怪东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5822935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com