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

标签 f#

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}   

我真的必须重复 QueryDisplayRecord 匹配的所有字段吗?我可以像你对​​记录实例做的事情一样吗? type QueryDisplay = {QueryResult with lastBuild:Object}
在这种情况下,我会根据字段类型改变记录,我也很想知道我是否可以这样做,但是在添加的字段而不是类型更改的字段上。

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

这两种都有可能吗?

最佳答案

记录类型不能从另一种类型“继承”。您可以将所有常见字段放在一个单独的类型中并引用它:

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

或者使用类:
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

关于f# - 我可以根据另一个定义记录类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24044021/

相关文章:

design-patterns - 有区别的工会是否与开放关闭原则相冲突

返回最大邻居索引的函数

f# - 递归计算表达式

f# - 使用 FSCheck 生成器

c# - 为什么输入重定向默认适用于 sudo 而不是 passwd? (。网)

f# - CPS转换时如何避免栈溢出?

.net - FParsec 中的尾递归

f# - F#会成为主流语言吗?

c# - 错误 : a type annotation may be needed

f# - 在 F# 中使用元组分组