我想更新 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 语句会引入这种类型的错误,我该如何解决它?