在 Elm 中,为什么这是 Int-Float 类型不匹配?
In Elm, why is this an Int-Float type mismatch?
我是 elm 的新手,一般来说是函数式编程。在调用 'show' 进行除法时,我遇到了一个令人费解的类型不匹配问题。此代码产生不匹配:
import Graphics.Element exposing (..)
columns = 2
main = placePiece 10
placePiece: Int -> Element
placePiece index =
show (index/columns)
代码产生此错误:
Type mismatch between the following types on line 9, column 3 to 22:
Int
Float
It is related to the following expression:
show (index / columns)
我读到的意思是它期望 Int,但得到了一个 Float。但 show 适用于任何类型。如果我使用 floor 强制除法为 Int,我会得到同样的错误。但是,如果我对数字进行硬编码,例如show (10/2)
效果很好。
那么上面代码的哪一部分期望得到一个 Int?
错误原因
实际上在这种情况下,编译器期望 Float
但得到 Int
。 Int
是 placePiece
函数的参数 index
,它需要一个 Float
因为 Basics.(/)
需要 Float
个参数。
为什么文字数字有效
当您只是对数字进行硬编码时,编译器可以判断出虽然您使用的是整数,但您可能希望将它们用作 Float
而不是 Int
。
修复错误
可以通过三种方法修复此错误。如果你真的想接受一个 Int 但想要浮点除法,你必须把整数变成浮点数:
import Graphics.Element exposing (..)
columns = 2
main = placePiece 10
placePiece: Int -> Element
placePiece index =
show (toFloat index / columns)
如果您对接受浮点数的 placePiece
函数没问题,您可以更改类型签名:
import Graphics.Element exposing (..)
columns = 2
main = placePiece 10
placePiece: Float -> Element
placePiece index =
show (index/columns)
如果你想要整数除法,你可以使用Basics.(//)
运算符:
import Graphics.Element exposing (..)
columns = 2
main = placePiece 10
placePiece: Int -> Element
placePiece index =
show (index//columns)
我是 elm 的新手,一般来说是函数式编程。在调用 'show' 进行除法时,我遇到了一个令人费解的类型不匹配问题。此代码产生不匹配:
import Graphics.Element exposing (..)
columns = 2
main = placePiece 10
placePiece: Int -> Element
placePiece index =
show (index/columns)
代码产生此错误:
Type mismatch between the following types on line 9, column 3 to 22:
Int Float
It is related to the following expression:
show (index / columns)
我读到的意思是它期望 Int,但得到了一个 Float。但 show 适用于任何类型。如果我使用 floor 强制除法为 Int,我会得到同样的错误。但是,如果我对数字进行硬编码,例如show (10/2)
效果很好。
那么上面代码的哪一部分期望得到一个 Int?
错误原因
实际上在这种情况下,编译器期望 Float
但得到 Int
。 Int
是 placePiece
函数的参数 index
,它需要一个 Float
因为 Basics.(/)
需要 Float
个参数。
为什么文字数字有效
当您只是对数字进行硬编码时,编译器可以判断出虽然您使用的是整数,但您可能希望将它们用作 Float
而不是 Int
。
修复错误
可以通过三种方法修复此错误。如果你真的想接受一个 Int 但想要浮点除法,你必须把整数变成浮点数:
import Graphics.Element exposing (..)
columns = 2
main = placePiece 10
placePiece: Int -> Element
placePiece index =
show (toFloat index / columns)
如果您对接受浮点数的 placePiece
函数没问题,您可以更改类型签名:
import Graphics.Element exposing (..)
columns = 2
main = placePiece 10
placePiece: Float -> Element
placePiece index =
show (index/columns)
如果你想要整数除法,你可以使用Basics.(//)
运算符:
import Graphics.Element exposing (..)
columns = 2
main = placePiece 10
placePiece: Int -> Element
placePiece index =
show (index//columns)