gpt4 book ai didi

f# - F# 中的预处理器指令对缩进敏感吗?

转载 作者:行者123 更新时间:2023-12-04 18:46:39 30 4
gpt4 key购买 nike

FSI 版本:11.0.50727.1

所以我在编写 F# shell 脚本时遇到了一些让我感到惊讶的事情。

当我这样做时:

#if INTERACTIVE
#r "System.Data.dll"
#r "FSharp.Data.TypeProviders.dll"
#r "System.Data.Linq.dll"
#endif

open System

将块粘贴到 FSI 中时出现 FS0010 错误。但如果我没有缩进 #r行,没有 FS0010 错误。我有点惊讶预处理器行会对缩进敏感。这是编译器问题还是这里有其他问题?

最佳答案

我认为规范和文档在这个主题上很不清楚,但规范在词法预处理器指令和编译器指令之间做了显着区分(参见 §12.4):

Compiler directives are declarations in non-nested modules or namespace declaration groups in the following form:

# id string ... string

The lexical preprocessor directives #if, #else, #endif and #indent "off" are similar to compiler directives. For details on #if, #else, #endif, see §3.3. The #indent "off" directive is described in §18.4.


我的解释是词法预处理器指令实际上在运行主编译之前由一些预处理器处理,因此缩进对这些指令无关紧要。
另一方面,像 #r 这样的指令, #load , #time等稍后由编译器处理,因此它们需要匹配通常的 F# 缩进指南。
正如@unwind 所说, documentation声明“缩进对于预处理器指令并不重要”,但我认为这仅适用于该文档页面上列出的预处理器指令(它们是词法预处理器指令而不是编译器指令)。

关于f# - F# 中的预处理器指令对缩进敏感吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139178/

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