类型推断
文章平均质量分 70
心想才事成
这个作者很懒,什么都没留下…
展开
-
6.6.1 F# 中函数调用的类型推断
6.6.1 F# 中函数调用的类型推断 虽然,在 F# 中,使用尖括号指定类型参数值,是可能的,与在 C# 中的方式相同,但这种方法很少使用。原因是,当编译器无法推断出所有的信息,需要从程序员的一些帮助时,我们可以将类型批注添加到特定的,需要更多的信息的位置。让我们用一个示例来演示: > Option.map (fun dt -> dt.Year) (Some(DateTi翻译 2011-05-18 09:26:00 · 478 阅读 · 0 评论 -
6.6.1 F# 中函数调用的类型推断
6.6.1 F# 中函数调用的类型推断 虽然,在 F# 中可以用尖括号指定类型参数值,与 C# 中的方式相同,但这种方法很少使用。原因是,当编译器无法推断出所有的信息,需要程序员的帮助时,我们仅在真正需要的地方,添加类型批注。我们用一个示例来演示: > Option.map (fun dt -> dt.Year)(Some(DateTime.Now));;error FS007翻译 2014-11-18 10:23:21 · 1093 阅读 · 0 评论 -
6.7.2 理解列表函数的类型签名
6.7.2 理解列表函数的类型签名 前面提到过,我们使用函数来筛选和映射列表,都很直观。在本节,我们将看到它们的类型签名,知道只通过此信息,就可以推断出高阶函数能做什么。当然,在一般情况下,不能从函数的类型就知道它能做什么,但对于泛型和高阶函数,例如那些用来处理列表的函数,通常是可能的。如我们前面所见的,处理泛型值的函数所做的不如单独处理值,因为,不能知道值的所有消息,因此,它们通常要翻译 2014-11-18 15:43:59 · 1353 阅读 · 0 评论 -
6.5.2 C# 中的函数组合
6.5.2 C# 中的函数组合 C# 中的函数组合是可能的,但使用非常有限,这是部分是由于在 C# 中散应用不能很容易使用,但更重要的是,因为大多数操作是用成员来写的,而不是函数。但我们至少可以用 C# 演示同样的想法,清单 6.18 显示了 Compose 方法的实现,以及使用的示例。 清单 6.18实现并使用 Compose 方法 (C#)static Func Compo翻译 2014-11-16 09:27:30 · 1381 阅读 · 0 评论 -
6.6 类型推断
6.6 类型推断 我们曾经讨论过值的类型推断,知道在 C# 3.0 中用 var 关键字,在 F#中用 let 绑定。从本节开始,我们将讨论由 C# 和 F# 共有的另一个方面,当在 C# 中调用泛型方法时,如 Option.Some(清单 5.9)或 Option.Map(清单 6.13),可以显式指定类型参数值,像这样: var dt = Option.Some(DateTim翻译 2014-11-16 11:42:15 · 1011 阅读 · 0 评论 -
4.2.2 计算数据
4.2.2 计算数据 在这个应用程序的第一个版本中,我们将只打印标签,以及图表中每一项所占比例(百分比)。要计算百分比,就需要知道列表中所有项目数值总和,这个值用清单 4.4 中的函数 calculateSum 来计算。 清单 4.4 计算列表中的数值和 (F# Interactive)> let rec calculateSum(rows) = matchrows翻译 2014-10-11 09:49:28 · 798 阅读 · 0 评论 -
5.4.3.2 F# 中的类型推断
5.4.3.2 F# 中的类型推断 在 F# 中,通常可以写大段的代码,而无需显式指定任何类型,因为类型推理机制更复杂。创建值,我们使用 let 关键字,但实际上,我们还没有见过在使用 let 值绑定中,需要显式指定类型的任何示例。清单 5.13 是一些我们可能会想到的示例。 清单 5.13 基本值的类型推断 (F#)let num = 123let tup = (123,翻译 2014-10-23 11:12:09 · 867 阅读 · 0 评论 -
5.4.3.1 C# 3.0 中的类型推断
5.4.3.1 C# 3.0 中的类型推断 在 C# 中,值类型推断主要用 var 关键字表示,这是 C# 3.0 的新功能。我们前面已经看到,但通过清单 5.12 的几个例子,我们可以更详细地讨论一下。 清单 5.12 使用 var 关键字进行类型推断 (C#)var num = 10 + (2 * 16);var str = String.Concat(new stri翻译 2014-10-23 09:31:43 · 737 阅读 · 0 评论 -
5.4.3 值的类型推断
5.4.3 值的类型推断 通常来说,类型推断是从代码推断出类型的一种机制,其目的为了简化代码,去掉所有需要显式指定的类型。在本节,我们会看到值的类型推断,使创建值更容易,不需要写出类型。这并不是需要类型推断的唯一地方,尤其是在 F# 中,这只是描述类型推的断第一部分,我们将在下一章讨论函数(和方法)的类型推断,以及自动泛型化。翻译 2014-10-23 08:37:39 · 533 阅读 · 0 评论 -
5.4.2 F# 中的泛型选项类型
5.4.2 F# 中的泛型选项类型 F# 中的泛型类型本质上与 C# 中的泛型类相同,能够写更通用和可重用的类型。我们已经知道,在选项类型的情况中,就需要泛型,因为我们希望能够使用完全相同的泛型类型,创建带有不同类型的选项值。当然,我们要写出类型安全的代码,还需要知道这个选项类型到底带有哪种类型。正如在 C# 中,我们声明带有类型参数的类型,作为值类型使用,保存在 Some 可选值中。翻译 2014-10-22 16:46:37 · 808 阅读 · 0 评论 -
3.3.4.2用 F# 求列表中数字的和
3.3.4.1 用 C# 求列表中数字的和 只要使用 C# 命令式编程,并处理过标准的 .NET 数组或来自 System.Collections.Generic 的 List 类,[ 写这个程序并不难, ]可能会创建一个变量total,并初始化为零,写一个 for 循环,迭代所有的数字,把每个元素加到 total 上(类似于 total + = list[i]);(或者,可以用 fore翻译 2014-09-28 08:58:42 · 1082 阅读 · 0 评论 -
3.2.2 用 C# 实现元组类型
3.2.2 用 C# 实现元组类型 System 命名空间中实际的 Tuple 类型更复杂一点,但是,我们可以很容易实现在这一章中所需要的功能。我们对其命名与 .NET 类型相同,因此,如果不使用 .NET 4.0,在所有的示例中可以使用我们[这里]所实现的[元组]。清单 3.7 是完整的代码。 清单 3.7 实现清单类型 (C#) public sealed class翻译 2014-09-16 21:05:36 · 1032 阅读 · 0 评论 -
3.2.2.1 更好地推断 C# 元组类型
3.2.2.1 更好地推断 C# 元组类型 在继续之前,我们想展示了一个 C# 的技巧,它能使后面使用元组的示例更简明。在前面的示例中,我们必须调用构造函数,创建元组类型的实例,这就要求显式指定类型参数。我们用 C# 3.0 中新的 var 关键字,C# 编译器能够推断变量的类型,但是,我们还可以做得更好。C# 中还有另外一个地方支持类型推断:调用泛型方法。如果调用泛型方法,它的类型参翻译 2014-09-16 22:27:51 · 794 阅读 · 0 评论 -
2.4.1 C# 和 F# 中的类型推断
2.4.1 C# 和 F# 中的类型推断 大多数的类型有简称,例如 int 或 Random,只有很少一部分需要类型推断,因为手写类型名称并不困难。C# 2.0 支持泛型,因此,可以构造更复杂的类型。在函数语言中的类型,像 F#,是相当复杂的,尤其是把函数当作值使用,因此,还必须有一种类型来表示函数。在 C# 3.0 中,可以对局部变量进行简单形式的类型推断。在C# 的早期版本中,声明翻译 2014-09-02 16:19:07 · 1110 阅读 · 0 评论 -
3.2.1.1 在 F# 中使用元组
3.2.1.1 在 F# 中使用元组 让我们看一个更复杂的 F# 使用元组的代码。在清单 3.5 中,使用元组存储有关城市的信息。第一个成员是字符串(城市的名字),第二个成员是整数,包含住在城市的人口。我们实现的函数 printCity,输出城市名字与人口的消息,最后,创建两个城市并打印有关信息。 清单 3.5 使用元组 (F# Interactive) > let p翻译 2014-09-14 16:46:45 · 878 阅读 · 0 评论 -
6.6 类型推断
6.6 类型推断 我们曾经讨论过值的类型推断,看到了在 C# 3.0 中用 var 关键字,在 F#中用 let 绑定。我们将从本节开始,另一个方面是由 C# 和 F# 共享的。当在 C# 中调用泛型方法时,如 Option.Some(清单 5.9)或 Option.Map(清单 6.13),可以显式指定类型参数值,像这样: var dt = Option.Some(Dat翻译 2011-05-18 08:40:00 · 478 阅读 · 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 · 888 阅读 · 0 评论