F# 缺少类型约束

2024-03-01

在以下代码中,请注意 get_Zero 的类型约束:

type Wrapper<'t> = { Data : 't[] }

let compute<'t
    when 't : (static member get_Zero : unit -> 't)
    and 't : (static member (~-) : 't -> 't)
    and 't : (static member (+) : 't * 't -> 't)>
        (wrapper : Wrapper<'t>) =
    wrapper.Data
        |> Seq.mapi (fun i value -> (i, value))
        |> Seq.sumBy (fun (i, value) ->
            if i % 2 = 0 then value
            else -value)

尽管我已经有了显式类型约束,但在调用 Seq.sumBy 时仍然收到以下编译器错误:

类型参数缺少约束 'when ^t : (static member get_Zero : -> ^t)'

有人知道这是怎么回事吗?谢谢。


尝试使下游静态成员约束显式化可能会令人沮丧,而且幸运的是,这很少有必要。只需标记功能即可inline并让它们被推断出来。

let inline compute (wrapper : Wrapper<_>) =
    wrapper.Data
    |> Seq.mapi (fun i value -> (i, value))
    |> Seq.sumBy (fun (i, value) ->
        if i % 2 = 0 then value
        else -value)

正确的签名是:

let inline compute<'t
            when 't : (static member Zero : 't)
            and 't : (static member (~-) : 't -> 't)
            and 't : (static member (+) : 't * 't -> 't)>

(您会注意到错误消息中的签名甚至不是有效的语法:when ^t : (static member get_Zero : -> ^t)。这就是我所说的令人沮丧的一部分。)

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

F# 缺少类型约束 的相关文章

随机推荐

  • 将逗号分隔的文本文件读入数组

    我正在尝试用 C 编写一个程序 模拟大学招生系统 学生输入他们的 ID 程序在文本文件中搜索他们的信息 并根据文本文件加载结构 我已经到了无法将他们注册的课程放入结构数组的地步 使用 getline 函数 使用 作为 delim 也将继续下
  • NAT后的两个节点如何通信?

    我有一些节点 每个节点都属于其他网络 每个节点都有私有IP 例如192 168 0 2并保持在 NAT 之后 节点之间是否有可能进行通信 实际上 我需要在这些独立节点之间传输文件 我尝试使用这个项目 https github com lib
  • 如何更新FormArray的控件

    我的表单组代码如下 this myForm this fb group branch name Validators required branch timing this fb array this initBranchTiming in
  • 缩小大小时防止引导程序中列的包装/堆叠?

    我想使用 nowrap 或任何其他替代方法来防止在 col md 4 上堆叠 col md 8 就像我对 无序列表 所做的那样 下面是我的代码片段 我还提到了每个盒子的类别和颜色 谢谢
  • Spring JdbcTemplate:如何限制选定的行?

    我正在使用春天JdbcTemplate用于从 MS SqlServer DB 获取数据的接口 在文档中我看到有setMaxRows 方法来设置所有查询的限制 但是如果我只想限制一个选择怎么办 有没有办法以 可配置 的方式仅对特定调用的查询设
  • 计算 facebook 封面偏移 y

    我正在使用 Facebook SDK 获取用户封面照片 我有 img 的路径和偏移量 y source http a5 sphotos ak fbcdn net hphotos ak ash3 526114 459046674110601
  • 以编程方式将用户权限添加到 Sharepoint 中的列表

    如何以编程方式将用户权限添加到 Sharepoint 中的列表 我想为某个列表的用户或组添加 贡献 权限 我正在使用 C 您可以使用SP角色分配 http msdn microsoft com en us library microsoft
  • 将枚举值传递给角度 2 组件

    我有一个enum 并且想要从模板传递enum价值 这怎么可能 export enum FIELDS GENDER
  • 多个 y 尺度,但仅启用一个用于平移和缩放

    考虑以下用于绘制 matplotlib 图形的 python 代码 import matplotlib pylab as pp import numpy as np alpha np linspace 0 2 np pi 400 sig1
  • 使用 HTMLUnit 使用 Java 以编程方式登录 Facebook

    这个问题有点像这个问题的补充 如何使用 Java 以编程方式登录 Facebook https stackoverflow com questions 2285250 how to log into facebook programmati
  • 是否可以让 Handler 意识到它已被删除?

    我正在编写一个自定义日志配置类 它设置一个特定的处理程序并将其与根记录器关联 并计划在多个应用程序中使用它 我担心实际的程序代码会删除该处理程序并安装另一个处理程序 有没有一种方法可以让处理程序检测到它已从特定记录器中删除 或者让记录器报告
  • 显示喜欢项目列表中的项目的用户

    我认为这是一个不切实际的问题 但我想得到一些反馈来确认 我有一个产品和用户数据库 用户可以在其中喜欢产品 喜欢的数据存储在仅包含 pid 和 uid 的参考表中 客户请求是显示喜欢产品列表中每个产品的 3 位用户 问题是 不可能在产品列表的
  • Chrome/Webkit 中的 CSS 动画/缩放问题

    此效果在 FF 中运行良好 但在 Chrome 中则不然 Chrome 中的 Firebug 结果显示 webkit animation 未在 Chrome 中呈现 然而 在 Firefox 中 您会在对象入口处看到 拉伸 效果 在 Chr
  • 使用 ICS 更改 wifi 网络时,ErrnoException:isConnected 失败:EHOSTUNREACH(没有到主机的路由)

    在 ics 上使用我的应用程序时 将 wifi 网络从网络更改为网络后 所有图像请求都开始返回 但出现异常 异常失败 gt org apache http conn HttpHostConnectException Connection t
  • 使用 Scanner 的 nextLine() 和 hasNextLine() 方法时出现问题

    我有一个包含以下数据的日志文件 最短路径 2 RV3280 RV0973C RV2888C最短路径 1 RV3280 RV2502C最短路径 2 RV3280 RV2501C RV1263最短路径 2 RV2363 Rv3285 RV328
  • Windows 服务如何以标准时间间隔启动应用程序?

    顾问设置 Windows 服务来运行应用程序 该应用程序应该每 15 分钟运行一次 该应用程序根本没有运行 并且服务似乎运行良好 我不熟悉应用程序作为服务运行时如何以标准间隔运行 该服务使用 SRVANY EXE 工具 任何使用 SRVAN
  • mysql删除重复数据

    这向我显示了所有具有完全相同的两个条目的名字和姓氏 SELECT firstname lastname COUNT AS Count FROM people GROUP BY firstname lastname HAVING Count
  • 尝试运行 Strapi 会出现模块解析错误

    我正在尝试通过 Ubuntu 20 04 上的 npm 使用 npm rundevelop 运行一个 Strapi 项目 该代码来自我的一个小组项目 没有其他人遇到这些问题 Error cache plugins strapi plugin
  • 带有 goto 命令的 Windows 批处理文件不起作用

    我对 GOTO 命令和附属标签有疑问 事实 给定文件夹中的一堆文件 它们是日志错误 我需要打开它们并检查它们是否包含特定字符串 如果是 则从文件名中删除一些字符 最后一次出现 之后的所有字符 包括其本身 并执行其他操作 为了切断字符 我以循
  • F# 缺少类型约束

    在以下代码中 请注意 get Zero 的类型约束 type Wrapper lt t gt Data t let compute lt t when t static member get Zero unit gt t and t sta