上周, MoonBit 新增特性 Trait object,新增……

查看 43|回复 1
作者:Moonbit   
MoonBit 更新
1. 新增特性 Trait object:
能够显式地将类型不同但实现相同 trait 的值装箱并表示成同一个类型,实现函数的动态分发。
fn get_show_list() -> List[Show] {
  let a = 42 as Show
  let b = "xxx" as Show
  let c = 3.14 as Show
  List::Cons(a, Cons(b, Cons(c, Nil)))
}
fn init {
  fn print_show_list {
    List::Cons(a, rest) => { println(a); print_show_list(rest) }
    List::Nil => ()
  }
  print_show_list(get_show_list())
}

2. 新增管道运算符
提供类似于链式调用的语法,可以串联多个连续的函数调用,省去let name = ...的代码。例如value |> func1(arg1,arg2) |> func2 相当于:
let a = value
let b = func1(a, arg1, arg2)
func2(b)
另一个例子:
fn sub2(x : Int, y : Int) -> Int {
  x - y
}
fn sum3(x : Int, y : Int, z : Int) -> Int {
  x + y + z
}
fn init {
  6 |> sub2(5) |> sum3(1,2) |> println()
}

3. 字符串支持使用\xFF进行十六进制转义
fn init {
  let data = "\x48\x65\x6c\x6c\x6f"
  println(data) //output: Hello
}
4. Inline test 变更
现在 test mode 也会执行 fn init ,执行顺序在 inline test 之前。
5. Moonfmt:改进类型和长数组字面量的缩进
原代码:

改进前的格式化效果:


改进后的格式化效果:


更多与 MoonBit 相关的内容可以点击 MoonBit 官网一探究竟!链接是:www.moonbitlang.cn/

int, Let, init, moonbit

1una0bserver   
不开源的编程语言基本都发展不起来。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部