#if - #else - #endif 破坏 F# 脚本
#if - #else - #endif breaking F# Script
使用 F# v4.0 中的 Visual Studio 2015 更新 3 和 fsi.exe
我正在尝试 运行 这个脚本:
//error.fsx
#if INTERACTIVE
let msg = "Interactive"
#else
let msg = "Not Interactive"
#endif
let add x y =
x + y
printfn "%d" (add 1 2)
输出: error.fsx(12,15):错误 FS0039:未定义值或构造函数 'add'
如果我然后注释掉 #if
-#else
-#endif
块,它工作正常:
// fixed.fsx
//#if INTERACTIVE
// let msg = "Interactive"
//#else
// let msg = "Not Interactive"
//#endif
let add x y =
x + y
printfn "%d" (add 1 2)
输出: 3
我确定我做错了什么(而不是这是一个错误)但我一辈子都想不出如何让它工作。
想法?
这是let msg
的缩进造成的。以下工作正常:
#if INTERACTIVE
let msg = "Interactive"
#else
let msg = "Not Interactive"
#endif
let add x y =
x + y
printfn "%d" (add 1 2)
我不得不说,我不完全确定为什么代码会给出您提到的错误消息 - 我怀疑这是错误报告中的错误,值得 reporting it to the F# team。至少,应该有一个合理的错误信息!
貌似有了缩进,F#解析器实际解析代码如下:
let msg = "Interactive"
let add x y =
x + y
printfn "%d" (add 1 2)
let msg
之前的间距导致编译器将 printfn
也视为缩进。如果您使用工具提示在编辑器中查看 y
变量的类型,您可以看到是这种情况...
使用 F# v4.0 中的 Visual Studio 2015 更新 3 和 fsi.exe
我正在尝试 运行 这个脚本:
//error.fsx
#if INTERACTIVE
let msg = "Interactive"
#else
let msg = "Not Interactive"
#endif
let add x y =
x + y
printfn "%d" (add 1 2)
输出: error.fsx(12,15):错误 FS0039:未定义值或构造函数 'add'
如果我然后注释掉 #if
-#else
-#endif
块,它工作正常:
// fixed.fsx
//#if INTERACTIVE
// let msg = "Interactive"
//#else
// let msg = "Not Interactive"
//#endif
let add x y =
x + y
printfn "%d" (add 1 2)
输出: 3
我确定我做错了什么(而不是这是一个错误)但我一辈子都想不出如何让它工作。
想法?
这是let msg
的缩进造成的。以下工作正常:
#if INTERACTIVE
let msg = "Interactive"
#else
let msg = "Not Interactive"
#endif
let add x y =
x + y
printfn "%d" (add 1 2)
我不得不说,我不完全确定为什么代码会给出您提到的错误消息 - 我怀疑这是错误报告中的错误,值得 reporting it to the F# team。至少,应该有一个合理的错误信息!
貌似有了缩进,F#解析器实际解析代码如下:
let msg = "Interactive"
let add x y =
x + y
printfn "%d" (add 1 2)
let msg
之前的间距导致编译器将 printfn
也视为缩进。如果您使用工具提示在编辑器中查看 y
变量的类型,您可以看到是这种情况...