使用F#v4.0中的Visual Studio 2015 Update 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:值或构造函数'添加'未定义
如果我然后注释掉#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
我确定我做错了事(而不是这是一个错误),但我不能为我的生活找出如何使这项工作。
思想?
答案 0 :(得分:4)
这是由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
变量的类型,则可以看到这种情况......