V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Moonbit
V2EX  ›  编程

国产编程语言 MoonBit 添加问号操作符?

  •  
  •   Moonbit · 2023-12-25 17:33:19 +08:00 · 704 次点击
    这是一个创建于 367 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MoonBit 更新

    01. 添加内置类型 Result

    enum Result[T, E] {
      Ok(T)
      Err(E)
    }
    

    02. 添加问号操作符

    新增了问号操作符,用于简化错误处理:

    fn may_fail() -> Option[Int] { ... }
    
    fn compose_may_fail() -> Option[String] {
      let x = may_fail()?
      let y = may_fail()?.lsr(3)
      Some ((x + y).to_string())
    }
    

    问号操作符的语义是:如果 t?t 的结果是 None,那么 t? 相当于 return None(直接跳出当前函数)。如果 t?t 的结果是 Some(x),那么 t? 相当于 x。除了 Option 类型,问号操作符也能作用在 Result 类型上:

    fn may_error() -> Result[Int, String] { ... }
    
    fn compose_may_error() -> Result[Int, String] {
      let x = may_error()?
      let y = may_error()?
      if y == 0 {
        return Err("divide by zero")
      }
      Ok (x / y)
    }
    

    03. 将关键字 interface 修改为 trait

    根据社区的反馈,将关键字 interface 修改为 trait,暂时保留对关键字i nterface的兼容:

    04. 修改死代码消除的逻辑

    对于顶层 let 在没有被使用的情况下,一律视作可以被删除,无论其是否有副作用。比如,

    let a = 1       // will be removed
    let b: T = f(a) // will be removed
    fn init {
      ..            // a and b are not used
    }
    

    如果函数 f 会触发副作用,需要把 f(a) 这个调用放到 fn init { .. } 中以避免其被删除

    05. 修复代码格式化工具不能正确处理中文注释的问题

    06.修复不能正确处理中文全局标识符的问题

    IDE 更新

    01. 添加是否自动启动 moon check 的选项

    vscode 用户可以在settings.json中使用moonbit.autoMoonCheck.enable控制是否自动启动moon check

    或者你也可以在设置中搜索 MoonBit:

    02. 修复 derive(Show) 误报错误的问题

    修复前

    修复后

    构建系统更新

    01. 添加 moon doc 命令

    添加 moon doc 命令,用于生成和预览文档。moon doc --serve会根据代码中的 markdown 注释生成文档,并在本地启动网页服务器。访问输出的链接即可查看效果。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 02:40 · PVG 10:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.