MoonBit新增functional for loop控制流支持

news2024/10/6 8:33:03

1. 增加functional for loop控制流支持

与传统的命令式for loop 不同,循环变量是不可变的。这样的设计将来也容易抽取出来做形式化验证:

fn init {
  for i = 0; i < 5; i = i + 1 {
    debug(i)
    // i = i + 4  error: The variable i is not mutable.
  }
}

输出:

01234

functional for loop也支持多个绑定。与其他语言不同的是,x和y在functional for loop的第三个表达式里具有同时更新的语义:

fn init {
  for x = 0, y = 0; x < 10; x = x + 1, y = x + 1 { 
                                        // ^~~ 这里x的值是更新前的
    println("x: (x), y: (y)")
  }
}

输出:

x: 0, y: 0
x: 1, y: 1
x: 2, y: 2
x: 3, y: 3
x: 4, y: 4
x: 5, y: 5
x: 6, y: 6
x: 7, y: 7
x: 8, y: 8
x: 9, y: 9

functional for loop内部也支持使用breakcontinue

fn init {
  let xs = [0,1,2,3,4,5,6,7,8]
  let mut sum = 0
  for i = 0, v = xs[0]; i < xs.length(); i = i + 1, v = xs[i + 1] {
    if v % 2 == 0 { continue }
    if v >= 7 { break }
    sum = sum + v
  }
  debug(sum) //output: 9
}
  1. 改进moon new创建项目的向导,现在可以用方向键选择创建lib或者exec项目:

在这里插入图片描述

  1. IDE支持管道运算符的智能补全。对于第一个参数类型与管道左侧表达式类型相等的函数,会放在补全列表的顶部,其它的补全选项仍然会显示在列表后。

在这里插入图片描述

  1. 根据社区反馈调整了pipe表达式:现在管道运算符右侧支持Double::to_int这样的函数调用。
fn init {
  debug(3.14 |> Double::to_int) // output: 3
  debug(4 |> Array::make('c')) // output: ['c', 'c', 'c', 'c']
}
  1. 修复IDE中缀表达式错误地插入inlay hint的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1456668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于物联网的工业企业能耗监控系统

上海安科瑞电气股份有限公司 胡冠楠 咨询家&#xff1a;“Acrelhgn”&#xff0c;了解更多产品资讯 摘要&#xff1a;针对工业制造企业存在高能耗、高污染的问题&#xff0c;提出了一种用于工业企业能耗监控的多层级网络系统。本系统可完成企业内部电力、水资源以及燃气等能源…

【内网穿透】如何在小米4A中刷OpenWRT并实现公网访问本地路由器

文章目录 前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 前言 OpenWRT是一个高度模块化、高度自…

linux基础学习(10):基本权限与相关命令

1.基本权限 用ls -l查看当前目录文件时&#xff0c;可以看到文件的基本权限 其由10位组成&#xff0c;其中&#xff1a; 第1位&#xff1a;代表文件类型。 - d lbc普通文件目录文件软链接文件块设备文件&#xff0c;也就是硬盘等存储设备的文件字符设备文件&#xff0c;是鼠…

迈向AI时代:掌握Python编程与ChatGPT的强强联手

文章目录 一、ChatGPT与Python编程的结合二、利用ChatGPT学习Python编程的优势三、如何使用ChatGPT学习Python编程四、学习技巧与建议《码上行动&#xff1a;用ChatGPT学会Python编程》特色内容简介作者简介目录获取方式 随着人工智能技术的飞速发展&#xff0c;编程已经成为了…

如何在三维地球上加载obj、fbx、ifc、dae、3ds、gltf/glb模型?

通过以下方法可以在三维地球上加载obj、fbx、ifc、dae、3ds、gltf/glb模型。 方法/步骤 下载三维地图浏览器 http://www.geosaas.com/download/map3dbrowser.exe&#xff0c;安装完成后桌面上出现”三维地图浏览器“图标。 2、双击桌面图标打开”三维地图浏览器“ 3、点击“…

element-ui 中合并表格的总结

合并表头 <el-table :span-method"objectSpanMethod" :header-cell-style"headerMethod"/>// 合并表头headerMethod6({ row, cloumn, rowIndex, columnIndex }) {// row数组对应的是每一列row[0].colSpan 0row[1].colSpan 2if (columnIndex 0) {r…

基础antdesign的业务型 短时间控件封装(复制即可使用)

{/* startFieldName 开始时间标识 endFieldName 结束时间标识 label 同form lable rules 是否开启规则校验 默认开启 detailData 详情数据&#xff0c;用于编辑回显 dateRange 限制结束时间的范围 例如&#xff1a;开始时间选择了 2024-02-05 &#xff0c;加上 dateRange3 后 只…

【Jvm】性能调优(下)线上问题排查思路汇总

文章目录 前言性能调优&#xff08;上&#xff09;线上问题排查工具汇总JVM调优&#xff08;中&#xff09;Java中不得不了解的OOM Error 一.JVM参数1.参数分类2.非稳定参数&#xff08;-XX&#xff09;说明3.查询JVM默认参数及运行时生效参数4.常用参数5.GC日志相关参数6.发生…

linux基础命令和示例

redis在go语言中的使用 以下说明以读者有redis基础的前提下进行 未学习redis的可以到b站1小时浅学redis了解大概&#xff0c;学会如何使用 【GeekHour】一小时Redis教程_哔哩哔哩_bilibili 以下开发环境以windows为测试环境&#xff0c;旨在练习redis在go语言中的使用 red…

并查集,真好用,一次AC不是梦!

文章目录 &#x1f680;前言&#x1f680;并查集&#x1f680;并查集的两个优化✈️路径压缩✈️按秩合并 &#x1f680;并查集代码模板 &#x1f680;前言 大家好啊&#xff01;今天阿辉来给大家介绍一种简洁而优雅的数据结构——并查集&#xff0c;不知道各位是否了解它&…

IC会员卡写编号,写印刷卡号,卡面卡号,加密D3读卡器R330读卡器会员卡系统

IC卡作为会员卡来使用&#xff0c;比磁条卡安全耐用 游戏厅会员卡、酒店会员卡、美容养生会所会员卡等 IC卡片印刷好以后&#xff0c;要把卡面印刷编号写入到卡片中&#xff0c;才可以在会员卡系统上使用 用以下软件可以批量写入 写入以后&#xff0c;我读取卡片内的数据 把数…

旧衣回收小程序开发,市场发展潜力巨大

在当下快节奏生活下&#xff0c;人们的闲置衣物越来越多&#xff0c;为了减少浪费&#xff0c;旧衣回收成成为了大众的选择。旧衣回收能够降低人们的损失&#xff0c;减少我国资源浪费&#xff0c;又能循环利用&#xff0c;是我国一个环保商业模式。 “互联网旧衣回收”推动市场…

【Effective Objective - C】—— block 块

【Effective Objective - C】—— block 块 前言37.理解块的概念块的基础知识块可以捕获变量内联块的用法块的内部结构栈块堆块全局块要点 38.为常用的块类型创建typedef要点 39.用handler块降低代码分散程度协议传值实现异步块实现异步回调操作里的块要点 40.用块引用其所属对…

JAVA高并发——JDK的并发容器

文章目录 1、超好用的工具类&#xff1a;并发集合简介2、线程安全的HashMap3、深入浅出ConcurrentHashMap3.1、ConcurrentHashMap的内部数据结构3.2、put()方法的实现3.3、get()方法的实现 4、有关List的线程安全5、高效读写的队列&#xff1a;深度剖析ConcurrentLinkedQueue类…

USB隔离模块(ADUM4160)--- 保护您的创新:从高精度到高电压

所需设备&#xff1a; 1、ISOUSB 隔离器&#xff1b; 数据信号、电源 双重隔离&#xff1b; ISOUSB 隔离器采用实现单个 USB 输入&#xff0c;单个USB 隔离输出功能&#xff0c;方便实际应用。另外&#xff0c;本产品采用 ADI 公司的 iCoupler 磁耦隔离技术&#xff0c;芯片…

震惊世界的Sora发明者之一,是毕业于上海交大的天才少年-谢赛宁?(本人辟谣)

很少发票圈&#xff0c;如果大家看到这个公众号标题党的离大谱的文章&#xff0c;求一定帮忙点下举报不实信息。如果有认识微信相关部门的朋友也请联系我一下。 Sora是bill他们在openai的呕心之作&#xff0c;我虽然不知道细节&#xff0c;但是bill告诉我他们每天基本不睡觉高强…

多线程——

目录 一、为什么要有多线程&#xff1f; 1、线程与进程 2、多线程的应用场景 3、小结​编辑 二、多线程中的两个概念&#xff08;并发和并行&#xff09; 1、并发 2、并行 3、小结 三、多线程的三种实现方式 1、继承Thread类的方式进行实现 2、实现Runnable接口的方…

【每日一题】三数之和

三数之和&#xff0c;点击左侧即可跳转。 目录 题目详情&#xff1a;思路&#xff1a;暴力&#xff1a;双指针&#xff1a; 代码实现&#xff1a; 题目详情&#xff1a; 思路&#xff1a; 暴力&#xff1a; 我们会显而易见的想到使用暴力解法&#xff0c;3个for循环暴力枚举…

如何在Ubuntu系统使用Docker部署开源白板工具Excalidraw并实现公网访问

文章目录 1. 安装Docker2. 使用Docker拉取Excalidraw镜像3. 创建并启动Excalidraw容器4. 本地连接测试5. 公网远程访问本地Excalidraw5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excal…

JavaAgent介绍 | 基本介绍及无侵入打印方法耗时

闲聊 最近在配置skywalking的过程中发现了-javaagent:这个配置&#xff0c;这里做一个简单的学习 什么是JavaAgent 网上似乎没有直接的文档介绍这个&#xff0c;只找了instrument包的相关文档&#xff0c;其内容页。其中的内容也都是介绍javaagent相关。 instrument包下核心…