MoonBit更新
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: 0x: 1, y: 1x: 2, y: 2x: 3, y: 3x: 4, y: 4x: 5, y: 5x: 6, y: 6x: 7, y: 7x: 8, y: 8x: 9, y: 9
functional for loop外部也反对应用break
和continue
。
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}
2. 改良moon new创立我的项目的向导
当初能够用方向键抉择创立lib或者exec我的项目:
3. IDE反对管道运算符的智能补全
对于第一个参数类型与管道左侧表达式类型相等的函数,会放在补全列表的顶部,其它的补全选项依然会显示在列表后。
4. 依据社区反馈调整了pipe表达式
当初管道运算符右侧反对Double::to_int
这样的函数调用。
fn init { debug(3.14 |> Double::to_int) // output: 3 debug(4 |> Array::make('c')) // output: ['c', 'c', 'c', 'c']}