这是一个包含语法和语义错误的F#代码:
let a b = b b
let x = (if)
Run Code Online (Sandbox Code Playgroud)
编辑:F#Vim的报告都无限类型的错误和语法错误,但fsc
还是fsi
只在sytnax停止错误.
V#的F#如何同时报告语法和语义错误,而F#编译器仅停止报告语法错误?
F#编译器(由封面下的Vim插件使用)具有错误恢复机制 - 这意味着当它找到一个无法解析的表达式时,它会尝试用能使其成为有效F#表达式的东西填充它.
当你写的时候let a = (if)
,我想编译器会在内部将它扩展为类似于
let a = (if _ then _ else _)
哪里_
是一个特殊的"无效表达式"占位符.
这使得可以对无效的F#代码进行类型检查,这在编写代码时通常在IDE中很有用(通常是无效的),因为类型信息用于自动完成等.
在直接运行编译器时报告自动"修复"代码中的类型检查错误是可能的,但可能没那么有用 - 当填充漏洞时,编译器可能并不总是按照您的预期执行,因此这可能会给出奇怪的结果错误消息.