elm - 在 Elm 中,为什么这是 Int-Float 类型不匹配?

标签 elm

我是 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,但得到了一个浮点数。但是 show 适用于任何类型。如果我使用 floor 将除法强制为 Int,则会出现相同的错误。但是,如果我对数字进行硬编码,例如show (10/2)它工作正常。

那么上面代码的哪一部分期望得到一个 Int 呢?

最佳答案

错误原因

实际上在这种情况下,编译器期待的是 Float但得到一个 Int . Int是参数 indexplacePiece函数,它需要一个 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.(//) 运算符(operator):
import Graphics.Element exposing (..)

columns = 2
main = placePiece 10

placePiece: Int -> Element
placePiece index =
  show (index//columns)

关于elm - 在 Elm 中,为什么这是 Int-Float 类型不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30770305/

相关文章:

http - Elm http 2.0.0 函数需要构造函数

elm - 右侧有 2 个值的函数是什么意思? (模型 -> Html msg)

websocket - 如何让 websockets 在 Elm 0.19 中工作

elm - GroupBy 使用 Elm 中的记录列表

elm - 将原始 HTML 插入 Elm 组件

request - 在 ELM 中,GET 请求不能有正文,是吗?

elm - 看起来关键字 "in"被用作变量

elm - 如何从 Elm 中的点列表创建三角形网格

elm - 错误处理和信号

榆树make.exe : getFileAttributesExStandard: does not exist