为什么我在if语句中收到布尔的错误消息

时间:2018-11-14 13:42:25

标签: f# boolean

我正在尝试创建一个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 

3 个答案:

答案 0 :(得分:4)

您的if表达式的格式为if a then true else false,因此您可以按照建议进行重构。您还可以将fstsnd的使用替换为模式匹配:

let isGameOver (p : player) (fstb, sndb) : bool =
  List.sum fstb = 0 || List.sum sndb = 0

答案 1 :(得分:3)

这实际上不是错误消息,而是来自linter的消息,您也许可以重构代码。

linter所暗示的是,只要表达式trueList.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,例如truefalse

Lint足够聪明,可以知道您正在使用if返回bool,并且if语句的条件部分也是类型bool。皮棉在说的是

if (expr) then
      true
    else 
      false 
不需要

,只需使用表达式即可完成操作。

因此更改是仅使用if的表达式部分,例如

List.sum (fst b) = 0 || List.sum (snd b) = 0