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"
否则实际找到的值
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"
否则实际找到的值