编译器无法判断哪个具有重复字段的记录类型应该是函数参数类型

2024-01-07

我的程序有一些具有相同字段名称的记录类型(每种记录类型意味着不同的内容)。编译器坚持认为与此记录形状匹配的函数参数必须是最后声明的类型,即使我声明具有明确字段名称的记录实例,并且始终将一致的类型传递到每个函数中。

处理这个问题的适当方法是什么?我知道我可以在函数上添加类型注释,但我觉得如果我以正确的方式做事,我不需要用类型注释来对抗编译器。

演示问题的最小代码:

type type1 = {x:int}
type type2 = {x:int}

let getX t =
    t.x

getX {type1.x=1}
|> ignore

编译器输出:

$ fsharpc --nologo test.fs


/tmp/typetest/test.fs(7,6): error FS0001: This expression was expected to have type
    type2    
but here has type
    type1    

有几种方法可以解决这个问题:

  1. 按照您的建议键入注释:

    let getX (t : type1) =
        t.x
    
  2. Define getX在定义冲突类型之前:

    type type1 = {x:int}
    
    let getX t =
        t.x
    
    type type2 = {x:int}
    
  3. 调用函数时不要显式指定类型:

    getX {x=1}
    

这些选项中哪一个是“正确”的方式很大程度上取决于具体情况。

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

编译器无法判断哪个具有重复字段的记录类型应该是函数参数类型 的相关文章

随机推荐

  • 根据 Scala 和 Spark 中的频率替换二元组

    我想用这种模式替换所有频率计数大于阈值的二元组 word1 concat concat word2 我已经尝试过 import org apache spark SparkConf SparkContext object replace d
  • 警告:X 的默认移动赋值运算符将多次移动分配虚拟基类 Y

    在 C 11 下测试库时 我在 Clang 下收到警告 我以前从未遇到过这个警告 并且搜索并没有提供太多的阅读和研究方式 该警告如下所示 它似乎与多重继承和公共基类有关 但我不清楚触发警告的细节或我应该采取什么措施来解决它 我的第一个问题是
  • Xml 数据到 WPF TreeView 的双向绑定

    我正在尝试重写我的森林垫 http ForestPad com使用 WPF 作为表示层的应用程序 在 WinForms 中 我以编程方式填充每个节点 但如果可能的话 我想利用 WPF 的数据绑定功能 一般来说 将 WPF TreeView
  • git pull Godaddy 与 Bluehost 的 shell_exec 配置

    我有一个来自 Github 的 git pull web hook 位于两个遥控器上 GoDaddy 生产 和 Bluehost 登台 这个问题与这些公司本身无关 而是关于设置差异的可能原因是什么 我有这个脚本 我已将其设置为 github
  • PHP 限制对管理页面的访问,除非登录

    我一直在考虑限制对管理页面访问的方法 其中之一是使用会话并使用管理页面中的下一个代码部分 if isset SESSION is admin header Location index php exit 我想知道是否有另一种方法可以做到这一
  • python读取HID

    我想做一个程序 它从连接到 Linux 系统的 HID 获取输入并从中生成 MIDI 我在 MIDI 方面还不错 但在 HID 方面却遇到了困难 虽然这种方法工作正常 取自 usr bin python2 import struct inp
  • 如何允许用户登录MySQL?

    作为 root mysql 用户 我执行了以下命令 grant all on mydb to john identified by john1 然后从 shell 中 我尝试通过以下方式登录 mysql h localhost u john
  • OpenCV 3:可用的 FeatureDetector::create() 和 DescriptorExtractor::create() 选项列表?

    edit 我正在看错误的OpenCV2代码示例 没有FeatureDetector create在 OpenCV3 中 这让我感到困惑 嘿 OpenCV 新手 通过分解其他人的 C 代码来通过示例进行学习 我想尝试以下所有可用选项 dete
  • 密码复杂性的正则表达式

    我正在尝试通过客户端 JavaScript 和服务器端 ASP NET C 上的正则表达式来实施密码复杂性的强制执行 规则如下 必须为 8 40 个字符 必须包含至少一位数字 必须包含至少一个小写字母 必须包含至少一个大写字母 必须包含至少
  • 如何修复选项 -F 错误未找到的目录[重复]

    这个问题在这里已经有答案了 我收到以下错误 ld 警告 找不到选项目录 F Applications Xcode app Contents Developer Platforms iPhoneSimulator platform Devel
  • Android SeekBar 使用 setMax 动态设置最大值后不刷新

    我正在使用 Stock SeekBar 组件来浏览一组 ViewPager 它工作得很好 唯一的问题是 当数据发生变化时 我必须通过 setMax int value 动态更改 SeekBar 的最大值 当我这样做时 SeekBar 不会更
  • zbarsdk ZBarReaderViewController - 设置ipad全屏

    我无法在 iPad 上全屏显示 zbarsdk 阅读器 它一直显示在左上角 我尝试过以下方法 reader wantsFullScreenLayout YES reader cameraOverlayView frame CGRectMak
  • 连续运行PHP脚本

    我在 MySQL 中有一个数据库 其中有时间条目 时间条目有1000多个 我想提取时间并在那个时间运行 PHP 脚本 我尝试连续运行 PHP 脚本来检查时间 但我的服务器不允许运行该脚本超过 60 秒 编辑 我必须每秒检查一次数据库 还有其
  • Post 方法 + WinHttpRequest + multipart/form-data

    我很困惑为什么这不起作用似乎找不到任何问题 这是代码 Public Const MULTIPART BOUNDARY speed Function getBalance As String Dim sEntityBody As String
  • 如何避免 Hibernate 中旧式的外连接 (+)?

    我写了这样的 HQL 查询 SELECT a FROM A a LEFT JOIN a b where Hibernate 生成这样的 sql 查询 SELECT a FROM A a LEFT JOIN a b where a b id
  • 使用 Node.js 和 PostgreSQL 的 INSERT 操作不起作用

    我正在使用 Node js 和 PostgreSQL 创建我的第一个应用程序 该应用程序连接到数据库 创建表 对网站进行网络抓取 将信息插入数据库 然后与数据库断开连接 我正在尝试使用async await 问题是插入操作不起作用 没有错误
  • 使用 Jquery Mobile 对图像进行捏合放大/缩小效果

    我必须使用 jquery Mobile 插件在图像上添加捏缩放 缩小效果的功能 有人可以帮忙吗 多谢 Brock 这在 jQuery Mobile 上是可能的 但您需要使用名为的第 3 方实现锤子 js https github com E
  • 有没有好的参考 SharePoint 数据绑定语法?

    我使用 SharePoint Designer 将 asp 服务器控件放入我的 SharePoint XSLT 中 我发现它非常方便将值预先填充到表单中 或者提供与 SharePoint 定义的布局 隐藏字段等 不同的体验 例如 如果我这样
  • Jupyter 创建笔记本失败:FORBIDDEN

    我刚刚将 Jupyter 升级到版本 4 3 1 虽然我可以打开以前创建的 ipynb 文件 但无法创建新文件 当我尝试创建新的笔记本文件时 我收到一个弹出窗口 显示 创建笔记本失败创建新笔记本时出错禁止 在终端中我注意到这个输出 W 12
  • 编译器无法判断哪个具有重复字段的记录类型应该是函数参数类型

    我的程序有一些具有相同字段名称的记录类型 每种记录类型意味着不同的内容 编译器坚持认为与此记录形状匹配的函数参数必须是最后声明的类型 即使我声明具有明确字段名称的记录实例 并且始终将一致的类型传递到每个函数中 处理这个问题的适当方法是什么