F# 中 t<'a> 和 'a t 有区别吗?

2024-02-17

之间的含义有什么区别吗t<'a> and 'a t在 F# 中?即使在声明后它们也可以互换使用吗?


没有区别,是的,即使在声明后它们也可以互换使用。

但请注意F# 组件设计指南 http://fsharp.org/specs/component-design-guidelines/#consider-using-the-prefix-syntax-for-generics-foot-in-preference-to-postfix-syntax-t-foo-with-four-notable-exceptions-list-option-array-ref建议(第 4.2 节):

考虑对泛型使用前缀语法 (Foo<T>) 优先 后缀语法 (T Foo),有四个值得注意的例外(list, option, array, ref).

F# 继承了 postfix ML 的命名风格 通用类型,例如“int list” 以及前缀 .NET 样式,例如 “list<int>”。您应该更喜欢 .NET 风格,除了四个 具体类型。对于 F# 列表,请使用后缀形式:“int list” 而不是 ”list<int>”。对于选项,请使用后缀形式:“int option” 而不是 ”option<int>”。对于数组,使用语法名称 “int[]” 而不是“int array” or “array<int>”. For refs, 使用 ”int ref“ 而不是 ”ref<int>” or “Ref<int>”。对于所有其他 类型,使用前缀形式:“HashSet<int>”, “Dictionary<string,int>”, 因为这符合 .NET 标准

此外,如果您使用 ML 风格的通用参数列表表示法,您将收到编译器警告,例如('a,'b) t vs. t<'a,'b>.

当我们这样做时,请注意以下建议:第 3.1 节 http://fsharp.org/specs/component-design-guidelines/#do-use-the-net-naming-and-capitalization-conventions-for-object-oriented-code-including-f-facing-libraries同一指南:

请在公共 API 中使用 PascalCase 作为通用参数名称, 包括面向 F# 的库。特别是使用 T、U、 T1、T2 用于任意通用参数,并且当特定名称使 感觉,那么对于面向 F# 的库,请使用 Key、Value、Arg 等名称 (但不包括 TKey)。

(尽管我个人倾向于忽略面向 F# 的公共库的这一建议)。

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

F# 中 t<'a> 和 'a t 有区别吗? 的相关文章

  • F# 类型提供程序和数据处理

    在上一个问题中 使用静态类型语言处理异构数据 https stackoverflow com questions 1798920 working with heterogenous data in a statically typed la
  • F# 中的部分匿名记录

    我如何输入一个函数 该函数接受具有字段的记录a and 任何其他领域 与此等效吗标准机器学习F 中可以使用函数吗 fun f a string Hello a 尝试了以下内容 但这些似乎在语法上无效 let f r a string imp
  • System.Version 未在 F# 中实现 System.IComparable

    我想对一个序列进行排序VersionF 中的对象 let maxVersion versions gt Seq max fun version gt version 编译器产生以下错误消息 类型 seq gt a 不支持 比较 约束 例如
  • FSharp.Data.JsonProvider - 从类型获取 json

    FSharp Data JsonProvider 提供了一种从 json 转换为 F 类型的方法 是否可以反向操作 即声明 FSharp Data JsonProvider 创建的类型之一的实例 将字段值设置为我需要的值 然后获取等效的 j
  • 不可为空字符串的 F# 类型别名

    我的代码中有一些域类型 我用它们来区分不同类型的字符串 因此编译器可以阻止我 例如以错误的顺序传递参数 type Foo string type Bar string let baz foo Foo bar Bar printfn A A
  • 作为参数的函数的类型推断

    我想编写一个函数 它接受几个元组作为参数 并用元素选择它们并传递给另一个函数 其中 i 作为另一个参数给出 我已经尝试过这样的事情 let function tup1 A A tup2 B B i otherFunction i tup1
  • 为什么没有List.skip和List.take?

    为什么没有List skip和List take 当然有 Seq take 和 Seq skip 但它们不会因此创建列表 一种可能的解决方案是 mylist gt Seq skip N gt Seq toList 但这会创建第一个枚举器 然
  • 从 F# 调用 C# 异步方法会导致死锁

    我有一组 F 脚本 它们调用我们创建的各种库 其中许多库公开了最初用 C 编写的异步方法 最近我发现脚本停止工作了 我想距离我上次使用它们已经有半年了 当时它们还可以工作 我试图隔离问题并提出了以下代码来重现它 首先 我们考虑一个包含以下
  • 在可移植类库中使用 F# JsonProvider 失败

    我正在尝试使用 JsonProvider 当我调用它的函数时出现以下错误 System TypeInitializationException was unhandled Message An unhandled exception of
  • 实现领域驱动设计的函数式方法

    我在使用 C 编写领域驱动应用程序方面拥有丰富的经验 我编写的应用程序越多 我就越发现我想要采用一种不太适合标准 C OO 技术的方法 我想编写尽可能多的纯函数 因为它们真的很容易测试 我想以更具声明性的方式编写我的业务逻辑 所以我一直在研
  • F# 类型函数和 [] 属性

    这两个 F 类型函数有什么区别 let defaultInstance1 lt a when a new unit gt a gt new a
  • .NET 4 自旋锁

    以下测试代码 F 未返回我期望的结果 let safeCount let n 1000000 let counter ref 0 let spinlock ref lt SpinLock false let run i0 i1 for i
  • 使用 F# 进行循环与递归

    这里的示例代码解决了一个项目欧拉问题 从数字 1 开始 按顺时针方向向右移动 方向 5 x 5 螺旋形成如下 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13
  • 在 F# 中的 Choice 之上构建 Either(或 Result)

    我根据 Scott Wlaschin 中的信息构建了一个成功 失败的 monadblog http fsharpforfunandprofit com posts computation expressions wrapper types
  • 如何使用 printf 自定义自定义类型的输出?

    我已经阅读了很多内容专家 F 并正在致力于构建一个实际的应用程序 在调试时 我已经习惯了传递这样的 fsi 命令 以使 repl 窗口中的内容清晰可见 fsi AddPrinter fun x myType gt myType ToStri
  • FParsec:如何组合解析器以便它们以任意顺序匹配

    任务是找到特定的键值对并解析它们 这些对可以按任何顺序出现 我的部分工作尝试 open FParsec type Parser lt a gt Parser lt a unit gt type Status Running Done typ
  • 如何解决“程序主模块为空:运行时不会发生任何事情”

    我在 F 解决方案中有两个项目 1 主要项目有 EntryPoint http msdn microsoft com en us library dd402151 aspx并设置为启动项目 2 support 第二个项目 拥有一组支持模块
  • 如何在 F# 中将对象转换为泛型类型列表

    在下面的代码片段中 我的目的是将 System Object 可能是 FSharpList 转换为它所持有的任何泛型类型的列表 match o with list lt gt gt addChildList o gt list lt gt
  • 通用高阶函数

    当我将泛型函数作为本地值传递时 但在作为参数传递时却不能使用具有不同类型参数的泛型函数时 是否有原因 例如 let f id let g x y f x f y g 1 2 工作正常 但如果我尝试将函数作为参数传递 let g f x y
  • 管道序列中的异常处理

    我正在开发一个基本的 2D CAD 引擎 管道操作符显着改进了我的代码 基本上 有几个函数从空间中的点 x y 开始 并在多次移动操作后计算最终位置 let finalPosition startingPosition gt moveByL

随机推荐

  • 作为配置属性的不可变类型

    是否可以使用不可变类型作为 NET 配置 API 的配置属性 假设我有一个名为 MyClass 的不可变类型 public class ImmutableClass private readonly int value public Imm
  • 弹性盒| Flex 项目被推出包含 div (屏幕外)

    我正在使用弹性盒布局 https css tricks com snippets css a guide to flexbox 设置过去任务列表的样式 任务描述和时间的长度总是变化很大 一切看起来都很棒 直到输入足够长的任务描述以换行到第二
  • 查找嵌套映射中特定键的值

    在 Clojure 中 如何找到可能位于嵌套映射结构深处的键的值 例如 def m a b b c c d e e f f find nested m f gt f Clojure 提供tree seq http conj io store
  • Firebase 中一个应用程序的多个项目:如何指定 Android 包名称

    我已经在生产环境中设置了 Firebase 项目 我想为我的 firebase 应用程序创建一个开发环境 我看到有很多关于此的文档 我需要根据文档获取 google services json 要获取 google services jso
  • 客户端 (iOS) 上的 Core Data 缓存来自服务器的数据策略

    我编写了许多与后端通信的 iOS 应用程序 几乎每次 我都使用 HTTP 缓存来缓存查询并将响应数据 JSON 解析为 Objective C 对象 对于这个新项目 我想知道核心数据方法是否有意义 这是我的想法 iOS 客户端向服务器发出请
  • 如何在不创建新用户的情况下使用电话验证

    嗨 我现在正在使用本机反应 我一直面临这个问题 我想使用电话验证而不创建新用户 但我找不到我想要的东西 我尝试使用 npm react native firebase auth 和 firebase auth 我找不到它 我非常感谢你的帮助
  • 连体网络显示 ValueError

    我正在使用 Siamese 网络来实现具有不同域的 2000 个功能 我想训练相似的特征对并测试不同的特征对 当我尝试拟合模型时遇到值错误 def get siamese conv unit input encoder models Seq
  • 如何使用 jQuery / Javascript 运行浏览器命令?

    我有一页 HTML 格式 有两个按钮 保存和打印 当用户单击 打印 时 它应该打印页面并当用户单击 保存 页面时 应打开该页面的 另存为 框 首选 Javascript jQuery 解决方案 对于打印 您可以使用window print
  • 使用对象检测算法进行 SageMaker 托管 Spot 训练

    我正在尝试使用新的托管点训练功能从现有模型开始训练对象检测模型 创建估计器时使用的参数如下 od model sagemaker estimator Estimator get image uri sagemaker Session bot
  • XHTML 合规性毫无意义吗?

    我现在正在构建一个网站 到目前为止 我已经痛苦地强制所有内容都兼容 并且它在浏览器中看起来几乎相同 不过 我开始实现一些第三方 免费的 javascript 它们可以执行添加属性等操作 例如 order 2 我可以解决这个问题 但这很痛苦
  • Python:在巨大的文本中替换单词

    我有一个巨大的文本和一个大约 10K 的单词列表 Python 中用其他单词替换文本中所有单词的最快方法是什么 编辑 文本大小 gt 1Gb 文本是人工编写的 并且 极度标记化 任何字母数字字符和任何其他单个符号都被分割成新的标记 单词数
  • 带节点的 OpenVPN,它是如何工作的?

    我可以使用以下 openVPN 命令轻松从终端连接到 VPN openvpn config conf ovpn 我需要使用 Javascript 连接到同一个 VPN 用于 selenium 测试 我已经安装了openvpn客户端与 NPM
  • 在可访问性方面, 相同吗?

    img src srcpath alt img src srcpath alt 也就是说 这些都被视为图像的空值吗alt文本 或者您必须确保alt 存在 You should使用alt 属性 空 alt 属性的每个示例为图像提供替代文本的规
  • heroku 错误:编译的 slug 大小:对于 Puppeteer 来说太大

    我的应用程序正在本地主机上运行 但是当我在heroku上部署时 puppeteer应用程序需要这个模块https github com jontewks puppeteer heroku buildpack https github com
  • Chrome 历史记录错误可能 - 执行 PRG,并且当再次导航到相同表单时 - 没有添加历史记录条目

    仅在 Chrome 中才会出现奇怪的后退按钮行为 我有两个页面 网格和表单场景 1 当从网格导航到表单时 一切都很好 网格被添加到历史记录中 2 当表单通过post发送到服务器时 我使用RedirectToAction再次重定向 302 到
  • 是否可以通过脚本禁用 Firefox JavaScript JIT?

    我们的网站有一个相当复杂的 JS 应用程序 该应用程序在最新的 Firefox 10 版本中失败 这是由于 JS 解释器中的一个错误导致变量返回 NULL 而实际上它们显然不是这样 此错误仅在 JIT 编译器处于活动状态时发生 而不是在禁用
  • 如何保持用户控件的纵横比?

    有谁知道如何保持 UserControl 的高 宽比 1 1 吗 例如 如果高度 gt 宽度 则宽度和高度将具有相同的尺寸 反之亦然 我不确定这是否有效 但是如果您为SizeChanged http msdn microsoft com e
  • Angular-ui 路由器同时获得两个活动状态

    我需要并行使用两种状态 一种用于我的页面 另一种用于具有多个子状态的模式 现在调用模态状态将清除我的页面 因为页面状态发生了变化 创建我的页面的子状态子级不是解决方案 因为模式将在多个页面上使用 Example stateProvider
  • Flutter - 容器中的顶部对齐文本

    我正在尝试离开 文本位于容器顶部 但即使FractionalOffset 1 0 0 0 the 文本在容器中间继续 可以做什么来离开 在容器的顶部 body new Card child new Column mainAxisSize M
  • 和 'a t 有区别吗?' aria-label='F# 中 t<'a> 和 'a t 有区别吗?'> F# 中 t<'a> 和 'a t 有区别吗?

    之间的含义有什么区别吗t lt a gt and a t在 F 中 即使在声明后它们也可以互换使用吗 没有区别 是的 即使在声明后它们也可以互换使用 但请注意F 组件设计指南 http fsharp org specs component