我正在尝试创建一个if语句,它应该在其中查看列表是否为空。然后,它应该返回布尔值true或false。但我收到错误消息。我该如何纠正。
棉绒:
if a then true else false
可能可以重构为a
。
let isGameOver (p : player ) (b : board) : bool =
let fstb = fst b
let sndb = snd b
if List.sum (fst b) = 0 || List.sum (snd b) = 0 then
true
else
false
答案 0 :(得分:4)
您的if
表达式的格式为if a then true else false
,因此您可以按照建议进行重构。您还可以将fst
和snd
的使用替换为模式匹配:
let isGameOver (p : player) (fstb, sndb) : bool =
List.sum fstb = 0 || List.sum sndb = 0
答案 1 :(得分:3)
这实际上不是错误消息,而是来自linter的消息,您也许可以重构代码。
linter所暗示的是,只要表达式true
为List.sum (fst b) = 0 || List.sum (snd b) = 0
,函数就返回true
,而表达式false
则为false
。因此,if
语句是不必要的。
答案 2 :(得分:2)
为什么我在if语句中得到布尔的错误消息?
我该如何纠正?
您需要关注的部分代码是
if List.sum (fst b) = 0 || List.sum (snd b) = 0 then
true
else
false
if语句的结果为bool
,例如true
或false
Lint足够聪明,可以知道您正在使用if
返回bool
,并且if语句的条件部分也是类型bool
。皮棉在说的是
if (expr) then
true
else
false
不需要,只需使用表达式即可完成操作。
因此更改是仅使用if
的表达式部分,例如
List.sum (fst b) = 0 || List.sum (snd b) = 0