Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 我可以根据另一个记录类型定义一个记录类型吗?_F# - Fatal编程技术网

F# 我可以根据另一个记录类型定义一个记录类型吗?

F# 我可以根据另一个记录类型定义一个记录类型吗?,f#,F#,我真的必须重复匹配的QueryDisplayRecord的所有字段吗?我可以像您一样处理记录实例吗键入QueryDisplay={QueryResult with lastBuild:Object} 在本例中,我根据字段类型更改记录,我也想知道我是否可以在添加的字段而不是类型更改的字段上执行此操作 我指的不是实例,而是记录类型定义 这两种情况都可能吗?记录类型不能从其他类型“继承”。您可以将所有公共字段放在单独的类型中并引用它: type ProcessParametersPair = {Def

我真的必须重复匹配的QueryDisplayRecord的所有字段吗?我可以像您一样处理记录实例吗<代码>键入QueryDisplay={QueryResult with lastBuild:Object}

在本例中,我根据字段类型更改记录,我也想知道我是否可以在添加的字段而不是类型更改的字段上执行此操作

我指的不是实例,而是记录类型定义

这两种情况都可能吗?

记录类型不能从其他类型“继承”。您可以将所有公共字段放在单独的类型中并引用它:

type ProcessParametersPair = {Definition:string; Provided:string}
type QueryResult = { DefinitionId:int;DefinitionName:string; ProcessTemplateId:int; StatusName:string; DefinitionArgs:string; BuildArgs:string;
    StatusCode:int option;cleanWorkspaceOption:string; RawProcessParameters:ProcessParametersPair; lastBuild:Tbl_Build}     
type QueryDisplay = { DefinitionId:int;DefinitionName:string; ProcessTemplateId:int; StatusName:Object; DefinitionArgs:string; BuildArgs:string;
    StatusCode:int option;cleanWorkspaceOption:string; RawProcessParameters:Object; lastBuild:Object}   
或使用类:

type Common = { A: int; B: int }
type Record1 = { Common: Common; C: int }
type Record2 = { Common: Common; D: int }

我并没有完全理解这个答案,但它可能做了一些与我所看到的非常接近的事情,但是在运行时,而不是编译时。听起来像是codedom、roslyn、Il Emit或T4的工作
type Common(a, b) =
    member val A = a
    member val B = b

type Class1(a, b, c) =
    inherit Common(a, b)
    member val C = c

type Class2(a, b, d) =
    inherit Common(a, b)
    member val D = d