V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Hooooooey
V2EX  ›  程序员

MoonBit 的 is 表达式,让代码更清爽了一点

  •  
  •   Hooooooey · 4 天前 · 802 次点击

    最近尝试了一下 MoonBit ,发现它的 is 表达式挺有意思的。简单来说,它用来检查某个值是否匹配某个模式,如果匹配成功,模式中定义的变量就能直接拿来用了。感觉这种方式既简洁又高效,避免了传统的 if 判断,代码更清爽了一些。 这个表达式的语法形式为 expr is pat,这个表达式为 Bool 类型,当 expr 符合 pat 这个模式的时候返回 true,比如:

    fn use_is_expr(x: Int?) -> Unit {
      if x is Some(i) && i >= 10 { ... }
    }
    

    来源:MoonBit 公众号的周报

    9 条回复    2025-02-18 10:10:06 +08:00
    codehz
        1
    codehz  
       4 天前 via Android
    这不是函数式语言的标准功能吗?
    dyc12389
        2
    dyc12389  
       4 天前
    看起来比 Rust 还要方便点。
    Rust 的 if let 是没有办法和别的条件进行混合的。
    Wincer
        3
    Wincer  
       4 天前
    pattern matching
    jroger
        4
    jroger  
       4 天前
    这样的语法在语义表达上可读性更强。喜欢~
    nagisaushio
        5
    nagisaushio  
       4 天前
    @dyc12389 #2 Rust 有 matches! 宏,感觉更类似
    sagaxu
        6
    sagaxu  
       4 天前
    这连 Java 这种不思进取的语言也支持啊,只有某大道至简不喜欢这种语法糖
    kagenomirai
        7
    kagenomirai  
       4 天前
    此事早已在 Haskell 中有所记载。
    ```haskell
    useIsExpr :: Maybe Int -> ()
    useIsExpr (Just i)
    | i >= 10 = ()
    | otherwise = ()
    ```
    my3157
        8
    my3157  
       4 天前
    有点意思, 有一股很重的 rust 的味, 不过相对于 rust 没有那么烧脑的抽象概念和约束, 风格上有点怪怪的, 不是很统一的样子

    不知道 1.0 以后稳定下来啥样子, 另外看 roadmap 好像 1.0 要加入异步, 希望不要走 rust 的老路
    FYFX
        9
    FYFX  
       3 天前

    你这个例子还好,这是我在推特上看到的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1277 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:46 · PVG 01:46 · LAX 09:46 · JFK 12:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.