Scala柯里化+名调用+递归的使用

本文介绍如何在Scala中通过递归及柯里化技术模拟实现while循环。文章详细展示了三种实现方式:柯里化方式、普通方式及闭包方式,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

        模拟实现while循环。

分析

  • while的语法格式为:while(条件表达式) {循环体}
  • Scala中大括号和小括号可以互相转化:while(条件表达式)(循环体)
  • 一个函数两个参数列表,就是柯里化的形式,循环体就要把代码块传递过来,循环就要使用递归。需要注意的是,条件表达式也要以代码块的形式传递过来。因为自定义的函数只会执行一次,如果传递的是表达式的值,后面递归过程中,条件表达式的值都是和初始一样的。

柯里化方式实现

// 模拟实现while循环
// 循环条件也要传代码块,因为myWhile函数只会在主函数调用一次,条件不会变
def myWhile(b: => Boolean)(body: => Unit): Unit = {
  if (b) {
    body
    myWhile(b)(body)
  }
}


var a = 10
myWhile(a > 0) {
  println(a)
  a -= 1
}

普通方式实现

def myWhile2(b: => Boolean, body: => Unit): Unit = {
      if (b) {
        body
        myWhile2(b, body)
      }
    }
    
    var a = 10
    myWhile2(a > 0, {
      println(a)
      a -= 1
    })

闭包方式实现

def myWhile3(b: => Boolean): (=> Unit) => Unit = {

  def fun(body: => Unit): Unit ={
    if (b){
      body
      myWhile(b)(body)
    }
  }

  fun _
}

//调用
var a = 10
myWhile3(a > 0){
  println(a)
  a -= 1
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值