Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 如果不遵守越位规则,会导致程序错误吗?_F# - Fatal编程技术网

F# 如果不遵守越位规则,会导致程序错误吗?

F# 如果不遵守越位规则,会导致程序错误吗?,f#,F#,F#使用越位规则确保正确缩进。如果不遵守这条规则,会导致程序不正确吗?还是仅仅是一个样式指南 例如,给定模式匹配的代码: let f x = match x with | 1 -> "pattern 1" | 2 -> "pattern 2" | _ -> "anything" 注意,其中两行是越位的。我通过遵守越位规则和不遵守越位规则来运行程序,我得到了相同的输出,但只是想得到另一个意见 还有if语句呢 let test x

F#
使用越位规则确保正确缩进。如果不遵守这条规则,会导致程序不正确吗?还是仅仅是一个样式指南

例如,给定模式匹配的代码:

let f x =   match x with 
   | 1 -> "pattern 1" 
   | 2 -> "pattern 2" 
            | _ -> "anything" 
注意,其中两行是越位的。我通过遵守越位规则和不遵守越位规则来运行程序,我得到了相同的输出,但只是想得到另一个意见

还有if语句呢

let test x y =
  if x = y 
  then "equals"
  else "is greater than"

let x = test 1 2
printf "%s" x
注意:当越位规则未得到遵守时,编译器会发出警告:

警告FS0058:可能缩进不正确:此标记与从位置(1:13)开始的上下文越位。尝试进一步缩进此标记或使用标准格式约定。


接受的答案需要解决模式匹配示例和if语句的问题。

轻量级语法的行为在F#spec中有非常详细的描述,专门处理越位行。这里的描述是技术性的,与F#解析器实现的词法分析有关。尽管如此,它还是有几个有用的例子

// The "|" markers in patterns must align.
// The first "|" should always be inserted.
let f () = 
    match 1+1 with
    | 2 -> printf "ok"
  | _ -> failwith "no!"   <--syntax error
let test x y =
  if x = y 
    then 
    "equals"
  else "is greater than"