编译器警告:FS0058:可能的缩进错误

时间:2017-10-20 10:05:00

标签: f# indentation compiler-warnings

我用Visual Studio编写了这段代码但是当我编译它时,它会给我回复这些警告:

  

FS0058:可能出现不正确的缩进,此标记超出了位置9:80开始的上下文。尝试进一步缩进此标记或使用标准格式

但是如果我尝试用OCaml编译器编译它就可以了。

let converti_tempo = (fun x -> if x < 0 then failwith "error" else if x < 1000 then (0, 0, x) else 
let rec m = x % 1000
let s = (x / 1000) % 60
let mm = ((x / 1000) / 60) % 60
in (mm,s ,m ));;

3 个答案:

答案 0 :(得分:1)

在第一行的末尾,您有一个else。这意味着else的表达式将在下一行定义,因此必须一直缩进到else,然后再多一点。代码如下:

let converti_tempo = (fun x -> if x < 0 then failwith "error" else if x < 1000 then (0, 0, x) else 
                                                                                               let rec m = x % 1000
                                                                                               let s = (x / 1000) % 60
                                                                                               let mm = ((x / 1000) / 60) % 60
                                                                                               in (mm,s ,m ));;

您也可以这样写:

let converti_tempo = (fun x -> if x < 0 then failwith "error" 
                               else if x < 1000 then (0, 0, x) 
                               else
                                  let rec m = x % 1000
                                  let s = (x / 1000) % 60
                                  let mm = ((x / 1000) / 60) % 60
                                  in (mm,s ,m ));;

答案 1 :(得分:1)

我想说这是一种更为“惯用”的方式来编写这个功能

let converti_tempo x =
    if x < 0 then
        failwith "error" 
    elif x < 1000 then
        (0, 0, x)
    else
        let m = x % 1000
        let s = x / 1000 % 60
        let mm = x / 1000 / 60 % 60
        (mm, s, m)

答案 2 :(得分:0)

对我来说,此编译器警告是由我的“ let”之一未正确对齐引起的。确保所有函数声明均始于每一行的开头。