最近尝试了一下 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 公众号的周报
![]() |
1
codehz 4 天前 via Android
这不是函数式语言的标准功能吗?
|
2
dyc12389 4 天前
看起来比 Rust 还要方便点。
Rust 的 if let 是没有办法和别的条件进行混合的。 |
![]() |
3
Wincer 4 天前
pattern matching
|
![]() |
4
jroger 4 天前
这样的语法在语义表达上可读性更强。喜欢~
|
![]() |
5
nagisaushio 4 天前
@dyc12389 #2 Rust 有 matches! 宏,感觉更类似
|
![]() |
6
sagaxu 4 天前
这连 Java 这种不思进取的语言也支持啊,只有某大道至简不喜欢这种语法糖
|
7
kagenomirai 4 天前
此事早已在 Haskell 中有所记载。
```haskell useIsExpr :: Maybe Int -> () useIsExpr (Just i) | i >= 10 = () | otherwise = () ``` |
![]() |
8
my3157 4 天前
有点意思, 有一股很重的 rust 的味, 不过相对于 rust 没有那么烧脑的抽象概念和约束, 风格上有点怪怪的, 不是很统一的样子
不知道 1.0 以后稳定下来啥样子, 另外看 roadmap 好像 1.0 要加入异步, 希望不要走 rust 的老路 |
![]() |
9
FYFX 3 天前
|