gpt4 book ai didi

f# - #if - #else - #endif 破坏 F# 脚本

转载 作者:行者123 更新时间:2023-12-02 04:05:55 25 4
gpt4 key购买 nike

使用 Visual Studio 2015 Update 3 和 F# v4.0 中的 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 block ,它就可以正常工作:

// 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# - #if - #else - #endif 破坏 F# 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39581342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com