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

理解斯卡拉:讨好

发布时间: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),所以你必须在这里依赖类型推断.

(编辑:李大同)

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

    推荐文章
      热点阅读