函数签名明确指出它应该返回一个 Bool 那么为什么函数返回 96?更重要的是,编译器认为 96 实际上是一个 Bool。这是一个错误吗?
> isLeapYear year =\
| (modBy 4 year == 0) && (modBy 100 year /= 0) || (modBy 400 year == 0)
<function> : Int -> Bool
> isLeapYear 1996
96 : Bool
不过,它有时似乎有效:
> isLeapYear 2000
True : Bool
> isLeapYear 1800
False : Bool
最佳答案
这是一个 compiler bug我去年提交的,现在已经修复。
它仅影响 /=
当一个参数为 0
时的运算符: 替换 (modBy 100 year /= 0)
与 (not (modBy 100 year == 0))
将解决这个问题。
该错误已在源存储库中修复,但我不知道修复何时发布。
关于boolean - Elm 返回整数而不是 Bool,编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54532295/