Elm 指定数字给我 Int

sgp*_*667 0 elm

我想看看给定列表的长度是否等于某个数字。但是==期望两个数字不是 Int,所以即使我输入(==) 1type 仍然number -> Bool是最后当我输入结果时lenght我得到编译错误:

- 类型不匹配 - - - - - - - - - - - - - - - - - - - - - - - ------------ REPL

此函数无法处理通过(|>)管道发送的参数:

4|   List.length |> ((==) 1)
                     ^^^^^^
Run Code Online (Sandbox Code Playgroud)

论据是:

List a -> Int
Run Code Online (Sandbox Code Playgroud)

但是(|>)正在将它传递给一个期望的函数:

number
Run Code Online (Sandbox Code Playgroud)

提示:只有 Int 和 Float 值可以用作数字。

那么如何指定我的常量是一个 Int 而不是 number 变量呢?

iva*_*rni 5

我认为您可能想多了,在 Elm 中检查相等性与在其他语言中一样直接。

myList = [1, 2, 3]
List.length myList == 3 // True
Run Code Online (Sandbox Code Playgroud)

如果您确实想使用该(==)功能,以防您进行柯里化或出于其他原因

List.length myList |> (==)
Run Code Online (Sandbox Code Playgroud)

然后您可以将其存储为变量或立即调用它

List.length myList |> (==) 3 // True
Run Code Online (Sandbox Code Playgroud)

或者

lengthChecker = List.length myList |> (==)
lengthChecker 3 // True
Run Code Online (Sandbox Code Playgroud)

但我会说最好坚持使用==.

只是为了扩大为什么你尝试没有编制,用于签名(==)(==) : a -> a -> Bool意思是这是一个函数,有一个参数a,并返回一个函数,它接受一个参数,a并返回Bool。所以在你的情况下((==) 1)是一个需要number. 当你这样做时,List.length |> ((==) 1)你试图调用那个需要List.length函数本身的数字的函数。