F#极简程序编译报‘expected class or object definition’错误原因咨询
问题原因分析
你遇到的错误本质是F#编译器(fsc)与F#交互解释器(fsi)的运行规则差异:
用
fsc a.fs编译时,编译器默认要生成可执行程序,此时要求代码必须符合编译单元结构:要么包含带[<EntryPoint>]标记的main函数,要么将代码包裹在模块/类定义中。你最初的极简代码printfn "a"是顶级语句,不符合编译器对可执行程序的结构要求,因此抛出expected class or object definition错误。《Expert F# 4.0》第172页提到的极简代码,是针对**F#交互环境(fsi)**的场景。在fsi中可以直接输入顶级语句并立即执行,不需要模块或入口点,这是交互模式的特性,用于快速测试代码片段。
额外补充:如果想用fsc编译你的极简代码,也可以添加--target:library参数,将其编译成类库(.dll),此时编译器允许顶级语句存在,因为类库不需要入口点。执行命令如下:
fsc --target:library a.fs
内容的提问来源于stack exchange,提问作者wang kai
相关产品推荐
相关产品推荐

