斯卡拉 – 奇怪的东西与咖喱功能
发布时间:2020-12-16 19:17:40 所属栏目:安全 来源:网络整理
导读:我有这种奇怪的情况,我不明白.我正在阅读“ Scala编程”一书,Ch. 9. 假设我有一个curried函数: def withThis(n:Int)(op:Int=Unit){ println("Before") op(n); println("After")} 当我在一个特殊的卷曲语法中使用一个参数调用它时,它按预期工作: withThis(5
我有这种奇怪的情况,我不明白.我正在阅读“
Scala编程”一书,Ch. 9.
假设我有一个curried函数: def withThis(n:Int)(op:Int=>Unit){ println("Before") op(n); println("After") } 当我在一个特殊的卷曲语法中使用一个参数调用它时,它按预期工作: 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) } 因为占位符_将以非简并的方式扩展为尽可能紧密地绑定(即,它不会扩展为println(x => x)). 另一件需要注意的是,块总是返回其最后一个值.在您的示例中,最后一个值实际上是(x:Int)=>的println(X). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |