You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gleam模式匹配使用守卫时出现语法错误求助

Gleam模式匹配使用守卫时出现语法错误求助

嘿,我刚看完你的问题和代码,一下子就找到问题根源啦!

你在写case模式匹配的守卫条件时用了if关键字,但Gleam里做模式匹配的守卫是用when,不是if——这就是编译器报错的核心原因哦。编译器看到if的时候完全没料到,所以才会提示“我没期待这个,预期是->”。

给你修正后的代码,直接把if换成when就搞定了,另外最后一个分支其实不用再加守卫,因为前面已经处理了满足条件的情况,剩下的自然就是不满足的,这样写更简洁:

pub fn filter(list: List(a), function: fn(a) -> Bool) -> List(a) {
  case list {
    [] -> []
    [h, ..t] when function(h) -> [h, ..filter(t, function)]
    [h, ..t] -> filter(t, function)
  }
}

再给你补个小知识点:Gleam的case守卫语法是「模式 + when + 布尔条件 -> 处理逻辑」,记住这个结构就不会再踩类似的坑啦~

备注:内容来源于stack exchange,提问作者João Areias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:18:11