9.2.1 使用保存的函数记录
使用记录保存函数,是 OCaml 中的常用方法,在 F# 中有所扩展。在看到可能的改进之前,清单 9.7 为第八章的原始解决方案提供了提醒功能。
清单 9.7 用函数的记录检查客户 (F#)
type ClientTest = <-- 表示检查
{ Check : Client –> bool
Report : Client-> unit }
let testCriminal(client) =client.CriminalRecord = true
let reportCriminal(client) =
printfn "‘%s‘ has a criminalrecord!" client.Name
let tests =
[ { Check = testCriminal | 创建记录值
Report= reportCriminal }; |
(* more tests...*) ]
代码首先创建一个记录类型,指定用函数类型,构成检查和报告部分。然后,创建两个函数,组合起来构成一个记录类型的值。使用函数的记录在概念上很简单,很容易将使用单独函数的代码,重构成使用记录的设计。如果我们要把这段代码改变成更加传统的 .NET 版本的话,可能不止一步。
我们前面提到过,函数类型类似于只有一个方法的接口。包含两个函数的记录,与有两个方法的接口非常相似,就毫不奇怪了。在 C# 中,我们几乎可以肯定使用接口来实现这种设计,F# 也可以这样做。
类似于成员,在创建健壮的应用程序,或可重复使用的 .NET 库时,接口更加重要。如果我们使用接口,不需要提供应该如何实现,因此,在写应用程序时,给我们很大的灵活性。在这一章的后面,我们将讨论在 F# 中实现接口的方法。开发能够从 C# 中调用的 .NET 库时,接口也非常有用。如果我们在 F# 中声明接口,C# 代码将把它看作是普通的接口。另一方面,带有函数作为成员的 F# 记录类型,看起来像有属性的类,有一些难以使用的类型。我们看一下如何能把记录类型改编成接口,但仍然以 F# 中自然的方式使用它。
原文地址:http://blog.csdn.net/hadstj/article/details/41846425