
trait MyShow { repr(Self) -> String str (Self) -> String // it has a default implementation } impl MyShow::str(self : Self) -> String { // default implementation of str self.repr() } type MyInt Int fn repr(self:MyInt) -> String { self.0.to_string() } // Now MyInt implements MyShow now _可以用来定义 phantom type ,来限制一些程序逻辑上非法的操作。例如我们希望不同单位的长度不能够相加:
type Length[_] Int type Kilometer type Mile fn add[T](x: Length[T], y:Length[T]) -> Length[T] { Length::Length(x.0 + y.0) } let d_km: Length[Kilometer] = Length(10) let d_mile: Length[Mile] = Length(16) 此时,两个单位不同的长度并不能够直接相加:
fn init { add(d_km, d_mile) |> ignore // ^~~~~~ Error: Expr Type Mismatch } 而两个单位相同的长度可以相加:
fn init { add(d_km, d_mile) |> ignore // OK } Toplevel 函数没有标记返回值的行为从之前的默认设置为 Unit 改成报错。
fn print_hello() { // ^~~~~~~~~~~ Error: // Missing type annotation for the return value. println("Hello!") } fn main { println((1).lnot()) } 输出:
-2 fn main { let l = List::Cons(1, Cons(2, Cons(3, Nil))) println(l) } 输出:
List::[1, 2, 3] byte 字面量由 b 作为前缀,使用方式如下:
fn init { let b1 = b'a' println(b1.to_int()) let b2 = b'\xff' println(b2.to_int()) } 更多关于 Byte 的功能还在完善中
之前:
struct A { } 之后:
struct A {} test_import这个字段中用到的依赖只会在测试的时候被用到。
默认只输出失败的测试用例信息,如果需要完整输出可使用moon test -v命令。
MoonBit 致力于为用户提供一个完整的开发工具链,包括 IDE 、编译器、构建系统、包管理器等。想了解更详细的内容可以前往官网一探究竟: https://www.moonbitlang.cn/
1 Donaldo 2024-03-18 19:25:12 +08:00 请教一下这个和 rust 有什么联系么?看着语法很相似。 |
2 moonbitlang OP @Donaldo 感谢提问。作为 Wasm 语言,MoonBit 在模式匹配、类型推断、泛型和类似 trait 的特设多态性设计方面的确受到了 Rust 很大影响,我们也希望解决 Rust 因学习难度大导致编译时间过长的问题。MoonBit 相比 Rust 而言最大的区别和优势在于采用了自动内存管理,更加用户友好,在编译速度和编译大小上都能够比 Rust 表现要更出色。 |