elm-lang 中的错误`(==) 期望右侧是:`

error in elm-lang `(==) is expecting the right side to be a:`

elm 的新手,起初它让我完全发疯,不知道这种挑剔的语言的来龙去脉(即使在阅读了关于它的 sh**load 之后,因为它是如此不同和挑剔......我我猜这就是函数式语言的本质)所以当你尝试做一件简单的事情时,一开始就像拉头发。

我收到以下错误:

The right side of (==) is causing a type mismatch.

29|             get 0 arrayOfValues == 'X'
                              ^^^
(==) is expecting the right side to be a:

    Maybe Char

But the right side is:

    Char

Hint: With operators like (==) I always check the left side first. If it seems

好的,我认为它是正确的并检查右侧。所以问题可能出在 左右论点如何相互作用。 测试:

it "blah blah blah" <|
    let
        someArray =
            [ 'P', ' ' ]
    in
expect (MyModule.doSomething someArray 'P') to equal 1
MyModule

doSomething : List Char -> Char -> Int
doSomething arrayOfValues symbol =
    let
        grid =
            fromList arrayOfValues

        found =
            get 0 arrayOfValues == symbol
    in
    if found then
        1
    else
        0

现在我假设但不确定,在尝试从我的数组中提取第一个值但不确定时它没有得到任何东西。也许我认为 Char 什么都没有返回? donno,可能还有其他问题。

我想让上面的代码正常工作,然后重构..我确信可能有更优雅的方法来编写我上面编写的代码,但首先要做的是修复这个错误并更好地理解它与现有代码。关于如何处理和处理什么,错误消息虽然不错,但对我来说并不那么明显。我有一些假设,但不确定如何处理导致问题的行为。

榆树的独特之处在于确定性。任何变量(可能不是类型)肯定会具有定义类型的值。

但是当涉及到数组或列表时,数组是否有索引"i"上的元素就变得不确定了。元素可能有也可能没有。

因此 elm 有 Maybe 的概念, 所以概念上

Maybe String = [ Just "string_value" | Nothing ] 

Array.get 的别名是

get : Int -> Array a -> Maybe a

需要 Int - 索引和 Array a - 数组元素数据类型的数组 作为参数和 returns Maybe a - 同样 a 是数组元素的数据类型

考虑一个例子

array = 
   fromList ["one", "two"]


  val1 = 
    get 0 array -- will return 'Just "one"'

  val2 = 
    get 3 array -- will return 'Nothing', since the element does not exists

这样一来,您将始终必须处理两种情况,当您有价值时,当您没有价值时

case val1 of
  Nothing -> 
    -- Raise some error message
  Just val ->
    -- `val` is the actual element/value found

如果你总是需要一个默认值,你可以使用

Maybe.withDefault "default_string" val1

这将始终 return 一个字符串值,并且当该值什么都不是时将 return "default_string" 否则实际找到的值