F# 对元组的成员约束

2023-12-20

当我意识到我需要在某个地方提供额外的值时,我在编写 F# 时通常都会有一个“哦耶”的时刻。这通常可以通过向传递的元组添加另一个值来轻松完成。然而,这意味着各种地图/排序/收集/等。需要更新,特别是函数 fst/snd 仅适用于长度为 2 的元组。

这不是一个大问题,但在探索性开发过程中它已经足够烦人了,我想我会写一个助手来减轻烦恼:

let inline get2 (t:^a) = (^a : (member get_Item2 : unit -> string) (t, ()))
let inline get2a (t:^a) = (^a : (member Item2 : string) t)

但是,这两个版本都不起作用。首先,get2,将无法编译,并显示“预期 1 个表达式,得到 2 个”。第二,get2a,将编译,但随后不能在元组上使用:“类型 '(int * string)' 不支持任何名为 'get_Item2' 的运算符”。

有没有什么方法可以做到这一点而不涉及大量重载? 有噪音OverloadID注释(F# 2.0 中不需要注释)


之所以ItemXF# 元组上的静态约束不起作用是因为System.Tuple<_,...,_>只是元组的编码形式,而不是编译器使用的静态表示形式。看6.3.2 元组表达式 http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597440在规范中。

但是,通过一些工作,您可以获得给定元组的运行时编码,如下所示:

open System
//like get2a but generic return type
let inline get2b (t:^a) = (^a : (member Item2 : 'b) t)

let x = (1,2)
let y = (1,2,3)

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

F# 对元组的成员约束 的相关文章

  • 限制实体框架中子实体的数量

    底线在前 有没有一种简洁的方法可以限制可以属于实体框架中父级的子实体的数量 我现在使用的是4 3 1 问题 我正在开发一个 ASP NET MVC3 站点 它通过使用实体框架的数据访问层访问数据 我有一个 SearchList 实体 它与搜
  • Weld 中的 JavaEE CDI:通用事件?

    我有一个基于泛型的特定事件处理的想法 但似乎 Weld 无法处理它们 我询问了 google 但找不到替代的 CDI 扩展 Question 是否有 CDI 扩展可以处理通用类型事件的事件传播 下面是我遇到的明确问题 我有三个常规事件 En
  • 运算符“==”不能应用于“T”和“T”类型的操作数

    在下面的代码示例中 编译器抱怨x Id reference Id 运算符 不能应用于 TId 和 TId 类型的操作数 类似的问题已被问到 SO 并通过替换来解决 运算符与IEquatable lt gt Equals or Equalit
  • 使用 apply 方法的泛型类型的 Scala 工厂?

    假设我有以下特征 它定义了一个接口并采用几个类型参数 trait Foo A B implementation details not important 我想使用伴随对象作为该特征的具体实现的工厂 我还想强制用户使用Foo接口而不是子类所
  • 使用 leftOuterJoin,不需要 .DefaultIfEmpty()

    的文档leftOuterJoin MSDN 上的查询表达式 http msdn microsoft com en us library hh225374 aspx通过样本反复暗示 当使用leftOuterJoin on into 你仍然必须
  • 如何编写一个计算表达式生成器来累积值并允许标准语言构造?

    我有一个计算表达式生成器 可以随时生成值 并且有许多自定义操作 但是 它不允许标准 F 语言构造 并且我在弄清楚如何添加此支持方面遇到了很多麻烦 举一个独立的例子 下面是一个非常简单且毫无意义的构建 F 列表的计算表达式 type Item
  • 如何将字符串转换为任意类型

    我想将字符串转换为泛型类型 我有这个 string inputValue myTxtBox Text PropertyInfo propInfo typeof MyClass GetProperty myPropertyName Type
  • Java HashMap 嵌套泛型与通配符

    我正在尝试创建包含自定义类的不同子类的哈希集的哈希映射值的哈希映射 如下所示 HashMap
  • 如何在postgresql中编写有关最大行数的约束?

    我认为这是一个很常见的问题 我有一张桌子user id INT 和一张桌子photo id BIGINT owner INT 所有者是一个参考user id 我想向表照片添加一个约束 以防止每个用户将超过 10 张照片输入数据库 写这个的最
  • 如何为所有整数类型创建通用整数到十六进制函数?

    我想为所有整数类型创建一个整数到十六进制函数 对于1字节的Int8 它返回两个字母 例如0A 对于2字节的Int16 它返回四个字母 例如0A0B 对于8字节的Int64 它返回16个字母 例如0102030405060708 func h
  • 为什么这个类型参数会保留在字节码中?

    The 键入擦除页 http docs oracle com javase tutorial java generics erasure html说 如果类型参数无界 则将泛型类型中的所有类型参数替换为其边界或对象 因此 生成的字节码仅包含
  • Scala UpperBound 和 LowerBound 概念

    下面是我尝试运行的代码 class Student def printDetails println I am a student def printSomeOtherDetails println I love Studying clas
  • F# 和 MEF:导出函数

    因此 我试图在 F 控制台应用程序中运行这个简单的测试 open System Reflection open System ComponentModel Composition open System ComponentModel Com
  • 如何编写强制执行复杂模式的 F# 类型提供程序?

    就在最近 我处理了一些交通和旅行信息的数据 即数据Datex2 http www datex2 eu content datex ii xml schema 21格式 该项目时间不长 现在已经结束 我像往常一样继续生成了一堆强类型 C 类x
  • F# 中的动态编程

    实现解决问题的动态规划算法的最优雅的方法是什么子问题重叠的问题 http en wikipedia org wiki Overlapping subproblem 在命令式编程中 人们通常会创建一个按问题大小索引的数组 至少在一维 然后算法
  • F# 引用的另一个限制?

    今天早些时候 我遇到了 F 引用的限制 并在这里提出了一个问题 F 引号 变量可能会转义作用域 https stackoverflow com questions 6414185 f quotations variable may esca
  • 在所有方法调用上允许类型见证有什么意义?

    假设我们有两种方法 如下所示 public static
  • Java 中的 TreeSet 与 C#.net 的等效项

    我有 Java 代码 其中包含TreeSet 我想将代码转换为 C 我可以使用哪个等效集合 如果没有 请提出替代方案 那将是系统 集合 通用 SortedSet
  • 基于函数签名的模式匹配

    在 F 中 您可以对函数签名进行模式匹配 我想用一个函数来装饰多个函数 该函数测量函数的执行情况并调用 statsd 我当前的功能是 let WrapFunctionWithPrefix metrics Metric Client IRec
  • 如何将一个 SwiftUI View 作为变量传递给另一个 View 结构

    我正在实施一个very自定义 NavigationLink 称为MenuItem并希望在整个项目中重用它 它是一个符合以下条件的结构体View并实施var body some View其中包含一个NavigationLink 我需要以某种方

随机推荐

  • 从字符串向量中提取第 n 个字符[重复]

    这个问题在这里已经有答案了 我有一个行向量 如下所示 1 118 o m n a jpg 2 122 m f h a jpg 3 152 y f n a jpg 4 160 y m h a jpg 5 083 o m a a jpg 例如
  • Asp.Net SQL刷新页面重复插入?

    我有一个 aspx 页面 其中包含一个文本框和一个按钮 当用户在文本框中输入信息并单击 发布 时 它会将数据插入到我的 sql 数据库中 问题是 如果用户点击刷新 它将继续将相同的数据插入数据库 我很确定调用了整个 单击 方法 而不仅仅是插
  • 将多个字符串传递给 SharedPreferences

    我想存储三个字符串作为我的应用程序的用户首选项 我已经设置了一个很好的布局 只需将字符串保存到 SharedPreferences 即可 我还想知道如何在下一个活动中检索这些字符串 下面是我当前的代码 如果有人可以向我展示如何将此功能添加到
  • Java Web Start应用程序可以从本地系统读取文件,但不能写入[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 请询问您是否需要更多信息 我有安全和所有权限标签 在我的 jnlp 中 当我离线运行我的 java 应用程序时 它可以正常工作 F
  • AWS API Gateway 和 Lambda 的公共 IP 地址(无 VPC)

    我已经配置了一个 AWS API Gateway 并创建了一个 Lambda 函数来连接到外部 REST API API网关和Lambda不在VPC中 因此出口IP地址是随机的 我面临的挑战是外部 REST API 位于防火墙后面 这需要将
  • 如何在 GDScript 中实现结构?

    GDScript 中是否有相当于 C 结构 类的东西 例如 struct Player string Name int Level 戈多3 1 1gdscript不支持structs 但使用可以实现类似的结果classes dict or
  • Windows 7 64 / Visual Studio 2008 / OpenCV2.1错误:“应用程序无法正确启动(0xhex)..”

    我正在 64 位模式下从分支顶部构建 OpenCV2 1 当我将库链接到我的代码 在 XP 上以 32 位模式工作 时 我收到对话框 应用程序无法正确启动 0xc0150002 单击 确定 关闭应用程序 当我启动应用程序时 事件查看器指向
  • 将一个时间范围按其他时间范围分割成多个部分

    我有一项复杂的任务 几天来我一直在用头撞墙 我已经尝试了大约 4 种不同的方法 但是每种方法似乎都停滞不前 并且变得非常令人沮丧 我有一个时间范围 例如 14 30 00 至 18 30 00 考虑某人轮班的时间范围 在此时间范围内 他们表
  • jasmine 与 jscoverage 自动化测试

    一直在看 jsunit 和 jcoverage 演示 单击覆盖率报告链接 在新选项卡中打开此内容 我想知道是否有人对 Jasmine 和 JSCoverage 做过类似的事情 我有点不确定如何继续 编辑 我想知道有什么可以和茉莉花记者一起做
  • fopen b 标志是什么

    在阅读中php fopen 的文档 http php net manual en function fopen php对于 php 我看到以下内容 为了可移植性 强烈建议您在使用以下命令打开文件时始终使用 b 标志fopen http ph
  • 某些 lua/c++ 代码中出现 SIGSEGV 错误

    以下代码以 SIGSEGV 错误结束 extern C include lua lua h include lua lualib h include lua lauxlib h int main int argc char argv lua
  • 创建具有左偏概率分布的随机数

    我想在 1 100 之间随机选择一个数字 这样获得数字 60 100 的概率高于 1 59 我希望数字 1 100 的概率为左偏分布 也就是说 它有一个长尾和一个峰 大致意思是 pers np arange 1 101 1 prob
  • 在 IF ELSE 块中包含 InstallDir

    我尝试使用以下代码 The default installation directory InstallDir PROGRAMFILES PRODUCT NAME to include x64 nsh If RunningX64 The d
  • css 中的图像轮播无法正常工作

    我正在制作一个网站的轮播 但宽度有问题 我希望每个图像都占据视口的整个宽度 但最后一个图像出现在第一个图像的下方 即使滑块动画也无法通过在右侧滑动额外内容来正确滑动图像 任何帮助 将不胜感激 carousel container carou
  • 将 Angular2 应用程序包含到 Asp.Net Webforms 页面

    当我将 angular cli ng build 生成的带有 aot 配置的 js 文件包含到我的 aspx 页面中时 我在 Chrome 控制台中收到一条错误消息 gt TypeError Error parameterCount is
  • 函数式语言对于飞行模拟器来说是一个不错的选择吗? Lisp 怎么样?

    我做面向对象编程也有几年了 函数式编程做的不多 我对飞行模拟器很感兴趣 并且对 Lisp 的函数式编程方面感到好奇 在面向对象的范例中 飞行模拟器或任何其他现实世界模拟器对我来说都是有意义的 这是我的问题 面向对象是表示现实世界模拟领域的最
  • .node 不是有效的 Win32 应用程序

    在 Window 10 Home x64 位 上 我尝试在命令提示符下运行以下命令 节点索引 js 错误如下 C Users cooldudeasateen OneDrive Coding sil node modules bindings
  • 如何避免在父组件状态更新时重新渲染循环中的所有子组件

    我有一个子组件 它位于父组件的循环内 当子组件之一更新父组件的状态时 它会重新渲染所有子组件 因为它是循环的 我怎样才能避免每次迭代的重新渲染 function Parent const selectedChild setSelectedC
  • 使用 React CSS 过渡组在输入时使组件错开

    我想为在 ReactCssTransitionGroup 中渲染的所有子级添加交错效果 但不知道如何去做 我在看this https stackoverflow com questions 31394719 react transition
  • F# 对元组的成员约束

    当我意识到我需要在某个地方提供额外的值时 我在编写 F 时通常都会有一个 哦耶 的时刻 这通常可以通过向传递的元组添加另一个值来轻松完成 然而 这意味着各种地图 排序 收集 等 需要更新 特别是函数 fst snd 仅适用于长度为 2 的元