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

2025 年 2 月 17 日
 Hooooooey

最近尝试了一下 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 公众号的周报

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

不知道 1.0 以后稳定下来啥样子, 另外看 roadmap 好像 1.0 要加入异步, 希望不要走 rust 的老路
FYFX
2025 年 2 月 18 日

你这个例子还好,这是我在推特上看到的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1112108

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX