乐趣区

关于程序员:MoonBit新增functional-for-loop控制流支持

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: 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
}

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']
}

5. 修复 IDE 中断表达式谬误地插入 inlay hint 的问题

退出移动版