理解斯卡拉:讨好
发布时间:2020-12-16 18:12:57 所属栏目:安全 来源:网络整理
导读:我最近开始学习 Scala并且遇到了currying.从这个 post的答案,这段代码片段 def sum(a: Int)(b: Int) = a + b 扩展到这个 def sum(a: Int): Int = Int = b = a + b 然后我看到了scala-lang的一个片段,它显示了可以写这样的东西来模拟一个while循环 def whileL
我最近开始学习
Scala并且遇到了currying.从这个
post的答案,这段代码片段
def sum(a: Int)(b: Int) = a + b 扩展到这个 def sum(a: Int): Int => Int = b => a + b 然后我看到了scala-lang的一个片段,它显示了可以写这样的东西来模拟一个while循环 def whileLoop (cond : => Boolean) (body : => Unit) : Unit = { if (cond) { body whileLoop (cond) (body) } } 出于好奇,我试图扩展它,并得到了这个 def whileLoop2 (cond : => Boolean) : (Unit => Unit) = (body : => Unit) => if (cond) { body whileLoop2 (cond) (body) } 但是我似乎缺少一些语法,因为我收到错误 error: identifier expected but '=>' found. (body : => Unit) => ^ 扩展模拟while循环的正确方法是什么? 解决方法
棘手的部分是处理无参数函数或“thunk”type =>单元.这是我的版本:
def whileLoop2 (cond: => Boolean): (=> Unit) => Unit = body => if (cond) { body whileLoop2 (cond)(body) } var i = 5 val c = whileLoop2(i > 0) c { println(s"loop $i"); i -= 1 } 您似乎可以使用(=> Unit)=>注释返回类型单位,但你不能注释(body:=> Unit),所以你必须在这里依赖类型推断. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |