加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

斯卡拉 – 奇怪的东西与咖喱功能

发布时间: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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读