gpt4 book ai didi

.net - 是否可以定义相互依赖并在单独的文件中定义的类型?

转载 作者:行者123 更新时间:2023-12-04 22:25:13 25 4
gpt4 key购买 nike

我正在尝试实现一个具有扩展解析功能的库。我决定使用 fsyacc,因为我从大学就知道它。不幸的是我遇到了以下问题。

我为我的语法头( Head )定义了一个类,并将其实现放在一个文件中。然后我将解析器定义为:

...
%start head
%type <Head> head
...

Fsyacc 生成分离模块( Parser )。为了成功,它必须按以下顺序编译: Head.fs Parser.fs
为了使这个库类似于您在 .NET 中可以找到的库,我想添加一个静态 解析 方法 负责人 .不幸的是,我需要使用 中的方法。解析器 模块。

我知道这样的 类型依赖 可以用' 解决和 ' 运算符,但它仅适用于在一个文件中定义的类型。

有没有其他方法可以创建相互依赖的类型,即使它们位于单独的文件中? 我一直在寻找像 C/C++ 中的声明/实现分离机制,但我找不到任何东西。

最佳答案

简短的回答:没有。在 F# 2.0 中,无法跨多个文件执行相互递归的实体。 (这是我们计划在下一版本的语言中解决的问题。)

您可以通过多种方式解决此问题,通常使用间接点和突变。例如,您的 Head 类型可能有一个静态的“InitializeParser”方法,该方法将函数值插入可变全局变量,然后 Head 中定义的静态 Parse 方法可以通过该可变全局调用,并且在实际定义解析器之后,它可以去调用 InitializeParser 来插入值。(如果这没有意义,我可以更详细地拼出来。)

关于.net - 是否可以定义相互依赖并在单独的文件中定义的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com