F#调用自定义函数出现FS0588错误及后续警告如何解决?
F# 函数返回值相关报错与警告解决方案
问题原因梳理
- FS0588 报错原因
F# 函数体必须以可计算的表达式作为最后一行,let a = GetField str1 1属于变量绑定语句,不是可返回/执行的表达式,你在绑定变量a后没有后续逻辑也没有返回值,编译器会判定代码块不完整。 - FS0020 警告原因
默认无返回值的main()函数最后一行返回了int类型的GetField执行结果,编译器提醒你该返回值未被处理。 - FS0988 警告原因
你没有显式指定程序入口点,编译器找不到要执行的入口逻辑,因此判定主模块为空。
正确实现方案
常规编译项目(.fs文件)方案
给main函数添加入口点属性,绑定返回值后可以按需使用(比如打印、参与后续计算),最后返回整数退出码即可:
open System open System.Text open System.Collections.Generic open System.Text.RegularExpressions let GetField (line:string) (num_skip:int) : int = let b = 5 b // 指定为程序入口点 [<EntryPoint>] let main _ = let mutable str1: string = "qwerty" // 绑定函数返回值到变量a let a = GetField str1 1 // 按需使用返回值,例:打印输出 printfn $"函数返回值为:%d{a}" // 显式返回整数退出码,0代表程序正常退出 0
如果不需要使用GetField的返回值,用ignore丢弃结果即可消除FS0020警告:
GetField str1 1 |> ignore
F#脚本(.fsx文件)方案
脚本运行不需要显式声明入口点,直接在模块层级编写执行逻辑即可:
open System // 省略其余open语句 let GetField (line:string) (num_skip:int) : int = let b = 5 b let mutable str1: string = "qwerty" let a = GetField str1 1 printfn $"返回值:%d{a}"
内容的提问来源于stack exchange,提问作者steeeeep
相关产品推荐
相关产品推荐

