F# 匿名记录错误不匹配/意外-Visual Studio 2019

问题描述

您好,我遇到了来自 F# 类的代码的问题。我有带有 F# 和 .NET 包的 VS2019,一切正常,直到出现异常记录。

type Student = {
imie: string;
nazwisko: string;
wiek:int;
rokStudiow:int;

}

  let dane = [
        {imie="Kowalska"; nazwisko="AA"; wiek=21; rokStudiow = 1};
        {imie="Nowak"; nazwisko="BB"; wiek=31;rokStudiow = 2};              // musza byc sredniki
        {imie="Adamski";nazwisko="CC"; wiek=41; rokStudiow = 3};            // kolekcja studentow
        {imie="Kot";nazwisko="DD"; wiek=51; rokStudiow = 2};
        {imie="Konopnicki";nazwisko="EE"; wiek=21; rokStudiow=2}
    ]
    let wynik = List.map (fun o -> { | imie=o.imie;nazwisko=o.nazwisko | }) dane

enter image description here

解决方法

这是一个简单的语法错误。

匿名记录写为 let foo = {| a=1; b="hi" |} 您在花括号和管道之间插入了一个空格。

只需将您的作业更改为

let wynik = List.map (fun o -> {| imie=o.imie;nazwisko=o.nazwisko |}) dane

你应该没事了。

(顺便说一句,您的代码中有很多多余的分号。例如,您可以跳过 type Student 定义中的所有分号 此外,更惯用的 f# 语句是

let wynik = dane |> List.map (fun o -> {| imie=o.imie;nazwisko=o.nazwisko |})

不过这纯粹是风格问题。)