箭头只应出现在case表达式和匿名函数中

Çöđ*_*xěŕ 1 dictionary pattern-matching elm

我正在尝试检查给定密钥中是否存在dict给定密钥。我对Elm函数式编程比较陌生,所以我不确定哪里出错了。

我收到的错误是:

箭头只应出现在case表达式和匿名函数中。也许您想要>或> =代替?

这是我尝试返回truefalse

dictExist : comparable -> Dict comparable v -> Bool
dictExist dict key =
    Dict.get key dict        
            Just -> True 
            Maybe.Maybe -> False
Run Code Online (Sandbox Code Playgroud)

另一方面,我也尝试过该Dict.member方法,但也没有成功,因此Dict.get我假设我应该使用它而不是Dict.member...

gle*_*nsl 6

您的代码有四个问题:

  1. 正如错误所指出的那样,您在case ... of表达式外使用箭头。
  2. Maybe类型的Just构造函数有一个伴随值,从字典中的项目,但你不把它绑定到任何东西。您必须通过将其分配给通配符模式来显式丢弃它_
  3. Maybe.Maybe不是构造函数。这应该是Nothing,这是该Maybe类型的另一个构造函数。
  4. 您已经颠倒了 dictExist

解决了这些问题后,此代码应该可以工作:

dictExist : comparable -> Dict comparable v -> Bool
dictExist key dict =
    case Dict.get key dict of        
        Just _ -> True 
        Nothing -> False
Run Code Online (Sandbox Code Playgroud)

但这实际上只是对它的复制Dict.member,它具有完全相同的类型签名。因此,替换dictExistwith的任何用法Dict.member应完全相同。

  • 给它起一个名字,而不是在`Just`中使用'_`作为值,例如`Just val-> val`。但是,在这种情况下,您可能想改用`Maybe.withDefault`,例如`Dict.get key dict |> Maybe.withDefault 0`。 (2认同)