首页 > 代码库 > 9.2.1 使用保存的函数记录

9.2.1 使用保存的函数记录

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# 中自然的方式使用它。

9.2.1 使用保存的函数记录