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

2024-03-14

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

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

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

Fsyacc 生成分离的模块(Parser)。为了成功,必须按以下顺序编译:Head.fs Parser.fs

为了使这个库类似于您在 .NET 中可以找到的库,我想添加一个静态Parse方法Head。不幸的是我需要使用以下方法Parser module.

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

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


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 限制对记录的访问。基于声明的权限是个好主意吗

    在 net 基于声明的身份框架中 如果我想限制用户对某个帐户 特定帐户 123456 执行操作 查看或编辑 我说的是商业实体 例如银行帐户 创建索赔是个好主意吗对于他们可以查看或编辑的每个帐户 一组中有很多索赔有什么缺点吗 系统管理员可能有
  • 是否可以调整AppFabric缓存服务器来存储更大的对象?

    当我假设将较大的对象图添加到缓存中时 我收到 AppFabric 缓存服务器错误 错误代码 子状态 连接已终止 可能是由于服务器或网络问题或序列化对象大小大于服务器上的 MaxBufferSize 请求的结果未知 我确信这不是网络问题 我能
  • 从 .net 应用程序登录 OpenID 站点

    我一直在考虑编写一个小工具来登录 SO 并定期使用一些主题 当前信息更新我的个人资料信息 例如我最新的博客文章或我需要帮助的问题等 为了让它工作 我需要以某种方式从控制台应用程序登录到SO 是否有一个 Net 库可以简化使用原始 http
  • 如何使用AutoMapper按照类中定义的顺序映射对象?

    给定这两个对象 我使用非常不同的对象来更好地阐明 public class Car public string Brand get set public int Speed get set public class Apple public
  • 如何检查 NTAccount 对象代表组还是用户?

    使用返回的访问规则时 GetAccessRules True True GetType System Security Principal NTAccount 如何判断每个规则中引用的 NTAccount 对象是用户帐户还是组 Update
  • 有没有办法在不重新编译的情况下覆盖 .NET Windows 服务名称?

    我有一个 Windows 服务可执行文件 我知道它是用 NET 编写的 我需要将其安装在不同的服务名称下以避免冲突 安装无论如何都不提供指定服务名称 如果我只能访问二进制文件 当我使用 installutil 安装它时是否可以覆盖服务名称
  • 为什么抽象类应该实现抽象基类的抽象方法?

    在下面的示例中 该类Derived实现抽象方法method从课堂上Main 但我想不出在抽象中填写方法体的理由Derived类的实现 当然 我应该只在实际类中实现抽象方法 那么我怎样才能避免这样做呢 我还可以做些什么 abstract cl
  • 如何转义 HTML 字符?在.NET中-->“

    如何在 NET 中转义 HTML 字符 我正在从 json 字符串中获取 html 并在标题中得到 amp quot more text 看起来我需要做两次才能得到 amp quot 成为 quot 那么它就是一个 如何转义 NET 中的所
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 有没有办法禁用 .NET 标签的“双击复制”功能?

    这真的很烦人 我使用标签作为列表项用户控件的一部分 用户可以单击它来选择列表项 然后双击它来重命名它 但是 如果剪贴板中有名称 双击标签会将其替换为标签文本 我还检查了应用程序中的其他标签 双击它们也会将其复制到剪贴板 我没有在这个程序中编
  • Windows 窗体中的标准 Windows 菜单栏

    我注意到添加了一个MenuStrip 来自工具箱 我的表单设计不会产生像许多本机 Windows 应用程序中那样的菜单栏 相反 我得到了一个像 Visual Studio 自己的菜单栏 没有任何样式设置MenuStrip似乎模仿了更常见的本
  • 将自定义应用程序设置存储在 XML 中

    请帮忙 我有这段代码 它是我的类来序列化 反序列化应用程序设置 XmlRoot EvaStartupData Serializable public class MyConfigClass public string ServerName
  • MS Source Server - 使用 srctool 查看时源流显然不存在

    我一直在尝试安装 MS 调试工具中的 MS Source Server 内容 目前 我正在通过 Subversion 索引命令运行我的代码 pdbs 该命令现在按预期运行 它为给定的 pdb 文件创建流并将其写入 pdb 文件 但是 当我在
  • 有没有办法将消息从 C#.NET 程序集(ActiveX)发送到 VB6 应用程序?

    本问答参考并可用于以下用途 目的 通过ActiveX dll从IE浏览器发送消息到vb6应用程序 从 ActiveX dll 向 vb6 应用程序发送消息 从 C net dll 发送消息到 vb6 应用程序 我读过了本文 http www
  • ThreadPool.SetMinThreads 不创建任何新线程

    我想弄清楚到底有什么影响ThreadPool SetMinThreads makes 根据官方文档 https learn microsoft com en us dotnet api system threading threadpool
  • .net 中的 deflate、gzip 和 zlib 的一个库

    首先 我们来定义一些容易混淆的术语 deflate compression algorithm zlib header deflate trailer gzip header deflate trailer 我正在寻找一个基本上可以让我执行
  • Windows DPAPI - 如何处理熵?

    我正在使用 Windows DPAPI 来加密一些敏感数据 密码存储在注册表中 这一切都运行良好 但我想知道是否有人可以澄清我对 NET 中 可选 提供给 ProtectedData Protect 的 熵 字节的理解 熵 字节数组似乎类似
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL

随机推荐