gpt4 book ai didi

elm - if 语句导致类型错误 elm

转载 作者:行者123 更新时间:2023-12-05 00:25:25 30 4
gpt4 key购买 nike

我想更新 Elm 类型的记录

type CubeData = {currDirection : Vec3, translation : Vec3, transform : Mat4}

我可以使用以下代码来完成。
updateCubeData : CubeData -> CubeData
updateCubeData cubeData = {cubeData | translation <- cubeData.currDirection,
transform <- translate cubeData.translation cubeData.transform}

但是,我现在想根据字段的当前值以不同的方式更新记录的字段,所以我尝试这样做
 updateCubeData : CubeData -> CubeData
updateCubeData cubeData = if abs cubeData.translation.x > 2.0 || abs cubeData.translation.y > 2.0
then {cubeData | translation <- cubeData.currDirection,
transform <- translate cubeData.translation cubeData.transform}
else {cubeData | currDirection <- negate cubeData.currDirection,
translation <- cubeData.currDirection,
transform <- translate cubeData.translation cubeData.transform}

这是一个类型错误,我在下面复制了它。注意 updateCubeData 的类型签名是文件的第 12 行。
Type error on line 15, column 68 to 76:
cubeData

Expected Type: {a | y : Float, x : Float}
Actual Type: Vec3

Type error on line 18, column 68 to 76:
cubeData

Expected Type: {a | y : Float, x : Float}
Actual Type: Vec3

Type error between lines 13 and 18:
if | ((abs cubeData.translation.x) > 2.0) ||
((abs cubeData.translation.y) > 2.0) ->
{cubeData |
translation <- cubeData.currDirection,
transform <- translate cubeData.translation cubeData.transform}
| True ->
{cubeData |
currDirection <- negate cubeData.currDirection,
translation <- cubeData.currDirection,
transform <- translate cubeData.translation cubeData.transform}

Expected Type: Vec3
Actual Type: {a | y : Float, x : Float}

如果我消除了 if语句,并将函数设置为等于 then 的内容和 else代码按预期编译和运行(如果该块是整个方法)。为什么在此处添加 if 语句会引入此类型错误,我该如何解决?

最佳答案

类型错误来自代码的这一部分:
abs cubeData.translation.x > 2.0 || abs cubeData.translation.y > 2.0
编译器提示 cubeData.translation类型为 Vec3但您将其视为类型 {a | y : Float, x : Float} .也就是说Vec3不是包含字段 x 和 y 的记录类型。

我相信你真的想使用 getXgetY来自 Math.vector3 的函数:
abs (cubeData.translation |> getX) > 2.0 || abs (cubeData.translation |> getY) > 2.0

关于elm - if 语句导致类型错误 elm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24336564/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com