在 F# 中,如何将类型名称作为函数参数传递?

2024-01-12

我想传递一个类型名称(例如int, or string,甚至用户定义类型的名称)作为函数参数。目前我正在做以下事情:

type IntegerOrIntegerList =
    | Integer of int
    | IntegerList of int list

let f (n : int) (d : 'T) : IntegerOrIntegerList =
    match (box d) with
    | :? int as i -> Integer(n)
    | _ -> IntegerList([0 .. n])

但存在d以上是偶然的。表达上述逻辑的惯用 F# 方式是什么?

在此先感谢您的帮助。


您可以使用类型 arg:

let f<'T> (n : int) =
  if typeof<'T> = typeof<int> then Integer(n)
  else IntegerList([0 .. n])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 F# 中,如何将类型名称作为函数参数传递? 的相关文章

  • F# 使用 while 循环

    我有一个数据读取器 我想从中返回行集合 在阅读了一天的书籍后 我无法找到在 f 中执行此操作的最佳方法 我可以在 F 中以正常的 C 方式进行操作 但这不是我使用 f 的原因 这就是我想要实现的目标 let values while rea
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • 如何让一条记录实现一个接口?

    如果我有一个界面 type IData abstract member firstName string abstract member lastName string 如何定义符合此接口的记录类型 我尝试了如下所示 gt type Dat
  • 使用 FParsec 解析 int 或 float

    我正在尝试使用 FParsec 解析文件 该文件由 float 或 int 值组成 我面临两个问题 无法找到好的解决方案 1 Both pint32 and pfloat将成功解析相同的字符串 但给出不同的答案 例如pint32将返回3解析
  • 在 open CL 中将结构数组传递给内核

    你好 我正在尝试在 open CL 中实现距离向量程序 基本上我在将结构数组作为参数传递到内核时遇到问题 我的结构定义是这样的 typedef struct int a nodes 4 node node srcA 为此分配内存后 我使用此
  • 为什么 .Net 框架指南建议您不要使用 ref/out 参数?

    显然 他们很 混乱 这是认真的原因吗 你还能想到其他的吗 你见过有多少开发人员并不真正理解 ref out 吗 我在真正需要的地方使用它们 但在其他地方则不然 它们通常仅在您想有效返回两个或多个值时才有用 在这种情况下它至少值得thinki
  • 如何实现可变虚拟成员函数

    所以我有这个功能 virtual void CallRemoteFunction const char pServerGameObjectId const char pFunctionName OVariant arg1 OVariant
  • 在 HTTP PATCH 请求中包含数据的正确方法

    当我组合 HTTP PATCH 请求时 可以选择哪些选项来包含 URL 参数之外的数据 以下任何一项都有效吗 最常见的选择是什么 多部分 表单数据 应用程序 x www form urlencoded Raw JSON 还有其他的吗 HTT
  • C 中的自定义数据类型

    我正在研究密码学 需要使用一些非常大的数字 我还使用新的 Intel 指令进行需要 m128i 数据类型的无进位乘法 这是通过使用以浮点数据作为参数的函数加载它来完成的 我需要存储 2 1223 整数 然后对其求平方并存储该值 我知道我可以
  • 一般处理枚举的 Scala 类

    我想创建一个通用类来保存枚举的值 并且还允许访问枚举的可能值 以属性编辑器为例 您需要知道属性的当前值 并且还需要能够知道该属性的其他合法值 并且枚举的类型不应该提前知道 您应该能够使用任何类型的枚举 我的第一个想法是这样的 class E
  • 如何让 mypy 知道现有类型支持某些属性和方法?

    我正在自学 Python 并试图通过 mypy 的类型检查系统 但我在类型 类 抽象类 泛型类型等之间迷失了方向 所以 我想创建一个通用 抽象类型 类来表示日期 指定该类型 类必须具有year month and day属性并且必须支持比较
  • 对 F# 中任意嵌套级别的列表求和

    我正在尝试创建一个 F 函数 它将返回列表的总和int任意嵌套 IE 它将适用于list
  • 如果目标是 x64,为什么 Seq.iter 比 for 循环快 2 倍?

    免责声明 这是微基准测试 如果您对此主题感到不满意 请不要评论诸如 过早优化是邪恶的 之类的言论 示例是针对 x64 Net4 5 Visual Studio 2012 F 3 0 的发行版 并在 Windows 7 x64 中运行 经过分
  • In 和 Out 属性在 .NET 中如何工作?

    我一直在尝试跨序列化数组AppDomain边界 使用以下代码 public int Read byte buffer int offset int count return base Read buffer offset count 作为猜
  • 命名和未命名类型

    问题 我最近开始阅读Golang规格手册 https golang org ref spec并陷入试图理解的困境有名和无名类型在相关部分 https golang org ref spec Types 我来自动态语言 这让我有点头疼 手册指
  • 条件运算符不能隐式转换?

    我对这个 C 的小怪癖有点困惑 给定变量 Boolean aBoolValue Byte aByteValue 编译如下 if aBoolValue aByteValue 1 else aByteValue 0 但这不会 aByteValu
  • 为什么我不能在接收数组参数的函数中使用 SetLength?

    我正在尝试使用以下函数来设置动态数组 即 var 参数 的长度 当我尝试编译代码时只有一个错误 dcc64 错误 lolcode dpr 138 E2008 不兼容类型 function execute var command array
  • C# - 命名空间内的类型声明

    在命名空间内而不是在类中声明类型的可能用途是什么 For ex namespace Test public delegate void Ispossible 这是有效的并且不会产生任何编译错误 但我无法想象为什么我们会以这种方式声明它而不是
  • 为什么没有参数的函数(与实际函数定义相比)可以编译?

    我刚刚看到某人的 C 代码 我很困惑为什么要编译它 有两点我不明白 The 函数原型与实际函数定义相比没有参数 中的参数函数定义没有类型 include
  • 将类型信息传递给 Scala 中的函数

    我有对 json 对象执行一些常见操作的代码 即提取 所以我想创建一个通用函数 它接受哪个类的类型参数 代码如下所示 def getMessageType T json JValue Either GenericError T try Ri

随机推荐

  • MySQL 中的字段递增是原子操作吗?

    我正在制作一个网站 我想在标准 MyISAM 表中增加一个计数器 简化示例 UPDATE votes SET num num 1 如果多个连接执行相同的查询 这会导致问题吗 或者 MySQL 会处理它并锁定表或其他措施以确保不存在冲突吗 写
  • Android ListView 项目在滚动时重叠

    我已经实施了一个ListView在我的应用程序中使用自定义实现CursorAdapter 我的问题是 每当我快速滚动到列表底部 启动应用程序后 有时我会发现所有绘制的 ListView 项目都相互重叠 如果我向后滚动或触摸其中一项 它们就会
  • 为什么我的数组无法正确打印? [复制]

    这个问题在这里已经有答案了 我正在尝试使用下面的代码编写一个简单的程序来创建一个一维数组 然后您可以使用索引号调用一个值 我在用java questions tagged java and eclipse questions tagged
  • 如何计算带有集合的列表中项目的出现次数?

    假设我有一个List
  • 如何在不停止单元格选择动画的情况下重新加载 UITableView

    当用户点击某个单元格时 我想更新我的UITableView 包括这个被点击的单元格的内容 最简单的方法是更新内部参数然后调用 self tableView reloadData 然而 reloadData立即停止我点击的单元格的漂亮的蓝色
  • QString 到 unicode std::string

    我知道有很多关于转换的信息QString to char 但我仍然需要对这个问题进行一些澄清 Qt提供QTextCodecs 要转换QString 内部以 unicode 形式存储字符 QByteArray 允许我检索char 它表示某种非
  • 推送到 CI 服务器内的 GitLab 存储库(部署密钥)

    GitLab 有这个很好的 部署密钥 功能 对于 CI 服务器读取和提取对存储库的访问权限非常有用 因为它们通常不需要更多功能 但是 我需要创建一个标签并将其推送到存储库 以标记从 master 分支构建的每个版本 更具体地说 我有一个 J
  • 字符串操作。查找 2 个索引之间的字符串

    给定一个字符串 例如 500 个字符 我想在索引 400 和索引 430 之间选择一个字符串 怎么写这样的函数呢 Thanks Use the string Substring http msdn microsoft com en us l
  • 将动态对象传递给角度模块的 forRoot()

    我正在使用该包ngx cookieconsent它将模块导入为 const cookieConfig NgcCookieConsentConfig cookie domain localhost theme block content po
  • SSIS foreach 与简单对象列表

    re SSIS http en wikipedia org wiki SQL Server Integration Services Foreach http msdn microsoft com en us library ms14172
  • 如何为一系列日期设置 Slack 提醒

    例如 我希望每天在我休息的日子里在特定频道中出现提醒 就像是 remind channel me will be on PTO 1 1 2016 until 1 5 2016 然后 在该范围内的每一天 频道中都会出现一条提醒 说明日期范围
  • Html 5视频标签和编解码器问题

    我有一个 mkv 文件 它的视频编解码器是avc 音频编解码器是ac3 如何将其放入 html5 视频标签中 我用
  • MsgWaitForMultipleObjects 的 C# 等效项是什么?

    我有一个带有报表模式 ListView 的 Windows 窗体 对于视图中的每个项目 我需要执行长时间运行的操作 其结果是一个数字 我在本机 win32 中执行此操作的方法是为每个项目创建一个工作线程 天真地 当然我不会创建无限数量的线程
  • 如何使用 Selenium 获取 Chrome 浏览器控制台日志 [INFO] 条目

    我在使用 Selenium 获取 chrome 浏览器控制台日志 INFO 条目时遇到问题 我收到的唯一级别类型的条目是错误 警告 严重 有没有办法获得与错误条目不同的内容 因为我需要获取 INFO 条目并根据其内容断言 我最近读到 Sel
  • 查找 C 程序中内存泄漏的最佳方法

    我正在尝试完成一项大学作业 评分标准指定 5 用于内存管理 特别是没有内存泄漏 据我了解 简单 C 程序中的内存泄漏仅是由程序放弃的指针引起的 即 malloc calloc etc 调用永远不会有相应的调用free 我的问题分为三部分 S
  • 如何在Linux shell脚本中更改文件扩展名?

    我发现了一些在类似情况下执行此操作的示例 但这是我编写的唯一除了逐字运行命令之外执行任何操作的 shell 脚本 因此我正在努力将这些示例应用到我自己的情况中 并且需要一些手工操作持有 我只是想从 MP4 中批量抓取音频 该脚本的工作原理
  • JavaScript:避免硬编码键码[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript event keyCode 常量 https stackoverflow com questions 1465374 javascript event keycode const
  • 制作自定义类 IQueryable

    我一直在使用 VS2010 的 TFS API 并且必须查询 FieldCollection 我发现 LINQ 不支持它 所以我想创建一个自定义类以使 Field 和 FieldCollection 可通过 LINQ 查询 所以我找到了一个
  • SELECT WHERE ...数百个条件

    有没有一种优雅的方法来做到这一点 SELECT Cols from MyTable WHERE zip 90210 OR zip 23310 OR zip 74245 OR zip 77427 OR zip 18817 OR zip 945
  • 在 F# 中,如何将类型名称作为函数参数传递?

    我想传递一个类型名称 例如int or string 甚至用户定义类型的名称 作为函数参数 目前我正在做以下事情 type IntegerOrIntegerList Integer of int IntegerList of int lis