Visual Studio 2019中F#匿名记录未匹配/意外报错问题求助
报错根因
你代码中写的{| imie=o.imie; nazwisko=o.nazwisko |}是F#匿名记录的标准语法,触发语法未匹配类报错的核心原因是 当前项目使用的F#语言版本低于4.6。
匿名记录是F# 4.6版本正式推出的语法特性,VS2019默认新建的F#项目如果没有手动调整配置,通常会绑定较低的F#语言版本,编译器无法识别带竖线分隔的匿名记录结构,就会抛出预期外的语法错误。
可落地的解决操作
- 调整项目F#语言版本
在解决方案资源管理器右键对应项目,打开「属性」面板,切换到「生成」设置页,找到「F#语言版本」下拉选项,将默认的旧版本值修改为4.6及以上版本(推荐直接选择latest匹配本地已安装的编译器版本),保存配置后重新编译项目,即可正常识别匿名记录语法。 - 核对匿名记录书写规范
调整版本后可对照标准写法校验代码:你写的匿名记录结构本身逻辑没有问题,正确的可编译写法如下:
核心注意点是匿名记录的大括号内需配平两侧的竖线let wynik = List.map (fun o -> {| imie = o.imie; nazwisko = o.nazwisko |}) dane|,不要漏写语法标记即可。 - 低版本兼容替代方案
如果课程环境要求兼容F# 4.6以下的旧版本,不需要使用匿名记录,直接定义精简的具名记录类型就能实现相同的字段提取效果:// 定义只保留姓名字段的精简记录类型 type BasicStudentInfo = { imie: string; nazwisko: string } let wynik = dane |> List.map (fun o -> { imie = o.imie; nazwisko = o.nazwisko })
内容的提问来源于stack exchange,提问作者Dominik Ludwin
相关产品推荐
相关产品推荐

