![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
选项
文章平均质量分 75
心想才事成
这个作者很懒,什么都没留下…
展开
-
5.3.4.1 实现 F# 中简单的选项类型
5.3.4.1 实现 F# 中简单的选项类型 在前面的示例中,我们使用了一个带有整数的选项类型,下面,我们看一个简单一点的类型,IntOption,它只有带整数值。我们敢保证你会针对需要的类型写声明,比如这里的: > type IntOption = |SomeInt of int |NoneInt;;(...)> SomeInt(10);;val it翻译 2014-10-22 11:40:56 · 645 阅读 · 0 评论 -
5.3.4 F# 中的选项(option)类型
5.3.4 F# 中的选项(option)类型 我们常常需要表达这样的思想,某些计算可能会返回未定义的值;在 C# 中,通常用返回 null(空值)实现。不幸的是,使用 null 频繁导致错误:写代码,可能会轻易地假定方法不返回空,一旦这个假设不成立,就会看到NullReference 错误。当然,好代码总是在适当的地方检查值是否为空,为应用程序写的单元测试,大量的检查就是验证这种特定情况翻译 2014-10-22 11:30:05 · 1348 阅读 · 0 评论 -
6.4.4.1 在 C#中使用选项类型
6.4.41 在 C#中使用选项类型 扩展方法能够以流畅的方式来编写使用绑定和映射的代码。由于括号中的数字可能会造成混乱,因此要注意,调用 Map 是嵌套在 lambda 函数中的,作为 Bind 的参数值: Option ReadAndAdd() { returnReadInput().Bind(n => ReadInput().Map(m=> m + n));翻译 2014-11-03 10:58:33 · 953 阅读 · 0 评论 -
6.4.1 使用 map 函数
6.4.1 使用 map 函数 我们将使用F# 库中的两个操作,因此,首先要看一下如何使用;然后,讨论如何实现,以及如何在 C# 中使用。我们已经知道,了解 F# 中函数的功能,最好的方法通常是理解类型签名。现在,我们就看一下 Option.map 的类型签名: > Option.map;;val it : (('a -> 'b) -> 'a option-> 'b optio翻译 2014-10-31 20:05:03 · 1037 阅读 · 0 评论 -
6.4 处理选项类型
6.4 处理选项类型 F# 中,最重要的可选值之一就是选项(option)类型。回顾一下我们在前面的章节中所看到的,选项类型能够安全地表达可能会缺失的值。这种安全性使我们在写代码时,不能轻易地假定值是存在的,当选项类型表示的值缺失时,将失败;相反,我们必须使用模式匹配,写代码要包含两种情况。在这一节,我们将学习处理选项类型两个有用的函数。 注意 我们刚才看到的处理元组的函数翻译 2014-10-31 15:46:01 · 829 阅读 · 0 评论 -
6.6.2 自动泛型化(automatic generalization)
6.6.2 自动泛型化(automatic generalization) 在这一章,我们已经实现了几个 F# 的高阶函数,也看到了在 F# 和 C# 中并排的实现。F# 实现的很重要方面,是我们根本不需要指定类型;这是由于有了自动泛型化(automatic generalization),它用在推断函数声明的类型。我们将用Option.bind 函数的实现作为示例,介绍这个过程是如何工作翻译 2014-11-18 11:20:06 · 883 阅读 · 0 评论 -
6.4.4 实现选项类型的操作
6.4.4 实现选项类型的操作 绑定(bind)和映射(map)的实现有类似的结构,因为,两者都是依据选项值进行模式匹配的高阶函数。我们来看一看 F# 和 C# 的实现,这是在 C# 中实现函数式概念的最好示例。我们先看一下清单 6.14,这是映射操作的实现。 清单 6.14 用 F# 和 C# 实现 map 操作F# InteractiveC#翻译 2014-11-02 21:24:16 · 614 阅读 · 0 评论 -
6.4.3 分步分析(Evaluating)示例
6.4.3 分步分析(Evaluating)示例 能这像这样自信地使用高阶函数,是需要一些时间的,尤其是嵌套使用。我们将研究前面清单中的代码的地,通过跟踪几个样本输入。从抽象的问题“一般情况下这段代码做什么?”,到具体的问题“特定情况下这段代码做什么?”,通常可以帮助澄清真相。如果我们第一次输入一个无效的值,会发生什么。那时,从 readInput() 返回的第一个值将是 None。要翻译 2014-11-01 20:36:16 · 951 阅读 · 0 评论 -
6.8.1 映射、筛选和折叠(Mapping, filtering, and folding)
6.8.1 映射、筛选和折叠(Mapping,filtering, and folding) 映射、筛选和折叠是函数编程中最常见的操作;在处理函数式列表时,我们已经用到过,但它们还支持所有其他的集合类型(我们将在第十和十二章讨论其中一部分);这些操作并不限于集合,所有的操作都可用于处理选项类型。清单 6.25 显示了映射、筛选和折叠函数的签名类型,清单中包括了我们尚未讨论过的Optio翻译 2014-11-20 10:30:12 · 882 阅读 · 0 评论