我用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 ));;
答案 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”之一未正确对齐引起的。确保所有函数声明均始于每一行的开头。