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#_C# To F# - Fatal编程技术网

F#中的结构依赖性——没有可变字段和空字段是否可能?

F#中的结构依赖性——没有可变字段和空字段是否可能?,f#,c#-to-f#,F#,C# To F#,我希望有两种类型,它们彼此作为字段: type Player<'Team>(team:'Team) = member this.Team = team type DoublesTeam(playerA:Player<DoublesTeam>, playerB:Player<DoublesTeam>) = member this.PlayerA = playerA member this.PlayerB = playerB 键入Pla

我希望有两种类型,它们彼此作为字段:

type Player<'Team>(team:'Team) =
    member this.Team = team

type DoublesTeam(playerA:Player<DoublesTeam>, playerB:Player<DoublesTeam>) =
    member this.PlayerA = playerA
    member this.PlayerB = playerB

键入Player您将无法使用类以完全相同的形式执行此操作。但是,如果切换到记录,则很容易:

type Player<'Team> = { team:'Team }

type DoublesTeam = { playerA:Player<DoublesTeam>; playerB:Player<DoublesTeam> }

let rec t1 = {playerA = p1; playerB = p2 }
and p1 = { team = t1 }
and p2 = { team = t1 }
type播放器)=
成员this.Team=Team.Value
类型DoublesTeam(playerA:Lazy,playerB:Lazy)=
成员this.PlayerA=PlayerA.Value
成员this.PlayerB=PlayerB.Value
设rec t1=DoublesTeam(惰性p1,惰性p2)
p1=播放器(惰性t1)
p2=播放器(惰性t1)

对于类,您将无法以完全相同的形式执行此操作。但是,如果切换到记录,则很容易:

type Player<'Team> = { team:'Team }

type DoublesTeam = { playerA:Player<DoublesTeam>; playerB:Player<DoublesTeam> }

let rec t1 = {playerA = p1; playerB = p2 }
and p1 = { team = t1 }
and p2 = { team = t1 }
type播放器)=
成员this.Team=Team.Value
类型DoublesTeam(playerA:Lazy,playerB:Lazy)=
成员this.PlayerA=PlayerA.Value
成员this.PlayerB=PlayerB.Value
设rec t1=DoublesTeam(惰性p1,惰性p2)
p1=播放器(惰性t1)
p2=播放器(惰性t1)

非常感谢您的快速回答!我对F#还不熟悉(好像不太明显……),虽然到目前为止在F#中创建自包含的算法是一件乐事,但在尝试移植整个C#应用程序时,我遇到了上述问题。我将对涉及的设计权衡进行更多的思考。如果你不介意的话,我会让这个问题再等一两天。如果你从更概念化的角度对这个主题感兴趣,包括使用
lazy
引入延迟,请参阅这篇与F#相关的迷人论文:。感谢你提供了令人惊讶的快速答案!我对F#还不熟悉(好像不太明显……),虽然到目前为止在F#中创建自包含的算法是一件乐事,但在尝试移植整个C#应用程序时,我遇到了上述问题。我将对涉及的设计权衡进行更多的思考。如果你不介意的话,我会让这个问题再等一两天。如果你从更概念化的角度对这个主题感兴趣,包括使用
lazy
引入延迟,请参阅这篇与F#相关的迷人论文:。如果你想考虑如何实际移植代码,而不是1:1重写,我建议用F#来娱乐和赚钱。特别是以下帖子可能会引起大家的兴趣@Daniel Fabian感谢您的建议!我读了几遍这个循环依赖迷你系列。他提到了let rec。。。而且。。。kvb描述的结构,但只是说它在那种情况下(使用类)不起作用。如果您想考虑如何实际移植代码,而不是1:1重写,我建议使用F#以获得乐趣和利润。特别是以下帖子可能会引起大家的兴趣@Daniel Fabian感谢您的建议!我读了几遍这个循环依赖迷你系列。他提到了let rec。。。而且。。。kvb描述的结构,但只说它在那种情况下不起作用(使用类)。