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"