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
相关产品推荐
相关产品推荐

