FSharp收到错误:错误FS0192在生成此模块的前期阶段未生成匿名记录<> f__AnonymousType

时间:2019-04-23 12:16:39

标签: .net-core f#

我正在尝试首次使用匿名记录,但是在编译时出现错误: 错误FS0192,在生成此模块的前期未生成匿名记录<> f__AnonymousType

我正在xubuntu上使用Visual Studio代码,并且在IDE中看不到任何错误-因此至少ionide似乎接受了它;我只会在尝试运行时得到错误

dotnet版本= 2.1.603

违规代码:

let load<'a> connectionString schemaDef (selector:obj) =
    select<'a> connectionString schemaDef selector |> List.tryHead   


let validateToken (clientToken:ClientWebToken) = 
    let loadedToken = liteOrm.load<WebToken> connectionString WebToken.SchemaDef {| TokenGuid= clientToken.TokenGuid |}
    match loadedToken with

我可以通过传递键入的记录来解决这个问题:

type TokenGuid = {
    TokenGuid: Guid
}

let validateToken (clientToken:ClientWebToken) = 
    let loadedToken = liteOrm.load<WebToken> connectionString WebToken.SchemaDef { TokenGuid= clientToken.TokenGuid }
    match loadedToken with

或通过显式声明匿名记录的结构(我不想这样做):

let load<'a> connectionString schemaDef (selector: {| TokenGuid: Guid |}) =
    select<'a> connectionString schemaDef selector |> List.tryHead   

我认为的问题是编译器无法推断适当的类型或将匿名记录转换为obj。 有什么方法可以将匿名记录作为通用对象传递给方法,如果可以,则参数应为哪种类型?

1 个答案:

答案 0 :(得分:3)

当前这是bug,用于将匿名记录传递给接受obj作为其输入参数的内容。这将得到解决。同时,建议您明确指定类型或使用类型推断,而不要使用obj参数类型。