F#:使用可区分联合解构绑定

2023-12-31

open System

let x = (1, 2)
let (p, q) = x
printfn "A %A" x
printfn "B %A %A" p q

let y = Some(1, 2)
try
  let None = y
  ()
with
  | ex -> printfn "C %A" ex
let Some(r, s) = y
printfn "D %A" y
// printfn "E %A %A" r s
  • http://ideone.com/cS9bK0 http://ideone.com/cS9bK0

当我取消注释最后一行时,编译器拒绝抱怨的代码

/home/rRiy1O/prog.fs(16,19): 错误 FS0039: 值或构造函数“r”未定义
/home/rRiy1O/prog.fs(16,21): 错误 FS0039: 未定义值或构造函数

解构中是否不允许使用枚举let?

但首先,即使我注释掉最后一行......什么am我在这里做什么?这是输出:

A (1, 2)
B 1 2
D Some (1, 2)

Update

作为记录,这是固定版本:

open System

let x = (1, 2)
let (p, q) = x
printfn "A %A" x
printfn "B %A %A" p q

let y = Some(1, 2)
try
  let (None) = y
  ()
with
  | ex -> printfn "C %A" ex
let (Some(r, s)) = y
printfn "D %A" y
printfn "E %A %A" r s
  • http://ideone.com/7qL9mH http://ideone.com/7qL9mH

Output:

A (1, 2)
B 1 2
C MatchFailureException ("/home/MBO542/prog.fs",10,6)
D Some (1, 2)
E 1 2

Perfect.


你尝试解构的方式y:

let Some(r, s) = y

您实际上正在定义一个名为的函数Some,有两个参数,r and s,以元组形式传递。

为了正确解构,您需要添加括号:

let (Some (r, s)) = y

顺便说一句,同样的事情也发生在try块:线let None = y创建一个名为的新值None且等于y.

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

F#:使用可区分联合解构绑定 的相关文章

  • 使用实体框架代码优先的 FSharp 记录类型

    我正在一个业务应用程序中进行概念验证 我想用 F 替换当前的 C 代码优先实体框架实现 我正在关注this http blogs msdn com b visualstudio archive 2011 04 04 f code first
  • 在 F# 列表中键入扩展名

    假设我有一个类型 let MyType some info 但是 它通常用于列表 MyType list 所以我可以定义 let MyTypeList MyType list 有没有办法在 MyTypeList 上定义类型增强 我的实际情况
  • F# 类型函数和 [] 属性

    这两个 F 类型函数有什么区别 let defaultInstance1 lt a when a new unit gt a gt new a
  • 对 F# 联合类型列表进行操作

    这是我的问题的延续F 联合类型列表 https stackoverflow com questions 13770911 f list of union types 感谢有用的反馈 我能够创建一个列表Reports with Report要
  • Silverlight 如何确定程序集是“Silverlight”?

    我正在尝试从 F 编译代码以在 Silverlight 中使用 我编译 noframework cliroot C program Files Microsoft Silverlight 2 0 31005 0 standalone 这会生
  • 为什么不是 (20 >) 。长度 。取 10 === const True

    tl dr 事实难道不是这样吗20 lt length take 10 whatever需要whatever成功地对列表进行模式修补 至少 or 缺乏 懒惰 或者 换句话说 为什么不 20 gt length take 10 const T
  • Racket 中的“match”可以具有带有来自外部作用域的变量的模式吗?

    考虑以下示例 lang racket match cat doge a b match b a t f Not a pair 如果我想匹配头部和尾部相同的对 我可能会这样写 但这不起作用 因为第二个a被绑定为一个新变量 并且匹配任何内容 是
  • Scala REPL 中的类型信息

    如果我使用 F 解释器 我可以定义一个简单的函数 如下所示 gt Function to check if x is an integer multiple of y gt let multipleOf x y x y 0 val mult
  • 不可变数据结构性能

    我不明白作为一个集合的东西怎么可能是不可变的并且仍然具有可接受的性能 根据我在 F Sets 中读到的内容 内部使用红黑树作为其实现 如果每次我们想要向红黑树添加新内容时 我们基本上都必须重新创建它 那么它如何才能具有良好的性能呢 我在这里
  • 如何统计字符串中特定字符的出现次数

    我不知道从哪里开始检查字符串中特定字符的 n 次出现 我已经列出了我认为是该功能框架的基本轮廓 但我不确定内容是什么 let countCharFromNth getStr string chkdChar char if getStr Le
  • 在 F# 中设置 ViewBag 动态对象的属性

    我在 C 中有这个操作方法 public ActionResult Index ViewBag Message Hello return View 这个视图 Index cshtml h2 ViewBag Message h2 这会在页面上
  • “Alternative”中的模式匹配

    我有一个函数 它的参数进行模式匹配以生成计算StateT Maybe 可以这么说 此计算在运行时可能会失败 在这种情况下 我希望当前的模式匹配分支失败 我非常怀疑是否有可能有类似的东西 compute Int gt StateT Maybe
  • 如何搭建Windows Phone开发环境并使用F#开发应用程序?

    我已经下载了Windows Phone开发工具 但我不知道如何使用F 来开发应用程序 目前是C 将 F 和 Windows Phone 模板安装到 Visual Studio 中可以让生活变得更轻松 如果您打开 Visual Studio
  • F# 是卡牌游戏 AI 的好语言吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PostgreSQL 中的字符串匹配

    我需要在 PostgreSQL 8 4 中实现正则表达式 据我理解 匹配 似乎正则表达式匹配仅在 9 0 中可用 我的需求是 当我给出输入时14 1我需要得到这些结果 14 1 1 14 1 2 14 1 Z 但排除 14 1 1 1 14
  • 如何制作Applicative的固定长度向量实例?

    最近了解了推广 决定尝试写向量 LANGUAGE DataKinds GADTs KindSignatures module Vector where data Nat Next Nat Zero data Vector Nat gt gt
  • 如何判断 F# 函数是否是纯函数?

    假设我有这两个 F 函数 let sq x x x let tm DateTime Now 显然 sq 是纯的 因为它对于给定的输入总是返回相同的值 而 tm 是不纯的 因为每次调用它时都会返回不同的值 一般来说 有没有一种方法可以确定 F
  • F# 2010 Seq.generate_using

    Visual Studio 2010 中的 Seq generate using 是否有替代 解决方法 FSharp PowerPack dll 不适用于 2010 AFAIK 很抱歉 2010 年的 PowerPack 尚未上市 我不记得
  • ProjectCracker 与 .netstandard 2.0 项目

    我的团队最近从使用 net 框架转向使用 net 标准 2 0 作为我们的 F 库 我们有一些在项目上运行的内部脚本来自动生成 Markdown 文档 这些脚本使用 F 编译器服务 SDK 来分析代码并检索类型元数据 文档注释等 我们正在使
  • Haskell:Where 与 Let

    我是 Haskell 的新手 我很困惑Where vs Let 它们似乎都提供了相似的目的 我读过一些比较Where vs Let但我很难辨别何时使用它们 有人可以提供一些背景信息或者一些示例来说明何时使用其中一种而不是另一种吗 哪里与让

随机推荐

  • CSS3 高度 100%

    我不知道如何问 写这个 所以请随时更新名称或指出正确的问题 标题 我正在设计一个跨 html5 css3 网站 并试图使其在每个 常见 浏览器上看起来都相同 这就是我所拥有的 http www pojotlan com example1 h
  • ProgressBars 和 Espresso

    当我在运行一些浓缩咖啡测试时显示的布局中有一个进度条时 然后我遇到 Caused by android support test espresso AppNotIdleException Looped for 1670 iterations
  • 在调试之前尝试启动带有任务的服务器时出现“无法跟踪指定的任务”

    我的调试配置如下launch json type node request attach preLaunchTask npm start name Attach port 9090 这是定义在中的任务tasks json type npm
  • C++ 和 D 中的元编程

    C 中的模板机制只是意外地对模板元编程有用 另一方面 D 是专门为促进这一点而设计的 显然它更容易理解 或者我听说过 我没有使用 D 的经验 但我很好奇 当涉及到模板元编程时 在 D 中可以做什么而在 C 中不能做什么 在 D 中帮助模板元
  • Android:自定义视图的默认属性

    我有一个扩展框架类之一的自定义视图 最多ViewAndroid 中的 s 为它们定义了一些默认属性 例如Button可点击 由以下设置android clickable true 如何为我的自定义视图提供应用程序范围的默认值 我这样解决了我
  • 如何在文件更改时更新 UI

    你好 我正在使用几个 Excel 文件构建一个闪亮的仪表板 我在框的页脚中插入了这些文件的链接 我想refresh更改我的 Excel 文件中的某些内容时的闪亮仪表板 我不想每次都运行整个 R 代码 文件内容更改后如何重新渲染输出 这里有一
  • ColladaLoader 和 ProgressCallback

    实施的正确方法是什么加载栏 in ColladaLoader 源代码显示加载器采用三个参数 其中一个是progressCallback progressCallback total length loaded request respons
  • pyglet on_draw 事件仅在鼠标移动时发生

    我有一个奇怪的问题 当 pyglet 应用程序启动时 它只绘制 1 2 帧然后冻结 on draw 事件停止发生 但每次我移动鼠标或按键时 on draw 事件也会调度 简而言之 我必须移动鼠标才能使我的 pyglet 应用程序基本工作 这
  • NHibernate.MappingException:没有持久化:XYZ

    现在 在你说之前 我did谷歌和我的hbm xml file is嵌入式资源 这是我调用的代码 ISession session GetCurrentSession var returnObject session Get
  • 使用 C 从文本文件中打印出数组

    我正在尝试创建一个代码 它从纺织品中读取数据 然后将数据存储到内存中 打印到屏幕上以便用户可以读取它 但它仍然保存到内存中 以便您可以将其用于其余部分节目的 这是纺织品的样品 75 nevermind nvm not much nm no
  • 在Java中获取文件/目录所有者的名称[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 OSX 上的 Java 中获取文件所有者的名称 https stackoverflow com questions 3096805 how do i get the name of a fil
  • 类型错误:canvas.getContext 不是函数

    我正在尝试使用 canvas 元素在 Javascript 中为跟随光标的球设置动画 我将对画布对象的引用传递给名为 followMouse 的函数 但是当我尝试获取其上下文时 firebug 给出了以下错误 类型错误 canvas get
  • C++ TR1 正则表达式 - 多行选项

    我认为 表示字符串的结尾 然而 下面的代码给出了 testbbbccc 作为结果 这对我来说非常令人惊讶 这意味着 实际上匹配行尾 而不是整个字符串的结尾 include
  • JUnit:4.8.1“找不到类”

    好吧 我和其他人一样 是 jUnit 的新手 并且很难让它正常工作 我搜索过论坛但提供了答案 我只是不明白 如果有人可以帮助我 我将不胜感激 让我提供基础知识 操作系统 Mac OS X 6 export JUNIT HOME Develo
  • Listviewdefs 中的 SugarCRM Smarty 代码

    我正在尝试使用 Smarty PHP 在 SugarCRM 6 5 3 的 ListView custom modules Leads metadata listviewdefs php 中实现自定义功能 这工作正常 customCode
  • 方法返回类型以满足多个接口

    是否可以指定一个返回实现两个或多个接口的对象的方法 假设我们有以下接口 interface FooBar Foo Bar getFooBar interface Foo void doFoo inteface Bar void doBar
  • 如何从在线下载视频并将其存储在本地设备上,然后使用视频播放器在 Flutter 应用程序上播放视频?

    我想开发一个 flutter 应用程序 用户可以通过一个按钮从在线下载所有视频并将其存储在本地设备上 然后在 Flutter 应用程序上使用视频播放器离线播放这些视频 我通过资产视频做到了这一点 但如果我使用资产中的视频并构建应用程序 那么
  • 红宝石冻结方法

    def track for stat This is a hash with 2 elements of proc symbol gt send stat array gt send stat 0 stat 1 freeze stat cl
  • 多个域上的域级会话 cookie

    如果您希望 ColdFusion 将会话 cookie 创建为域级别 cookie 例如 bar com 而不是 foo bar com 那么您可以在 jrun web xml 中配置它
  • F#:使用可区分联合解构绑定

    open System let x 1 2 let p q x printfn A A x printfn B A A p q let y Some 1 2 try let None y with ex gt printfn C A ex