9.2.1 使用函数记录

9.2.1 使用函数记录

 

    使用记录存储函数,是 OCaml 中的常用技术,在 F# 中有一些扩展。在讨论可能的改进之前,看一下清单 9.7,它为第八章原始的解决方案提供了一个提醒功能。

 

Listing 9.7 Testing clients using records of functions (F#)

 

type ClientTest =
  { Check : Client �C> bool
     Report : Client -> unit }

let testCriminal(client) = client.CriminalRecord = true
let reportCriminal(client) =
  printfn "'%s' has a criminal record!" client.Name

let tests =
  [ { Check = testCriminal
       Report = reportCriminal };
     (* more tests... *) ]

 

    代码首先创建一个记录类型,它指定了函数类型,形成检测和报告检查的部分。然后,创建了两个函数,并组合起来形成一个记录类型的值。使用函数记录在概念上很简单,很容易将使用单独函数的代码,重构成使用记录的设计。如果我们要把这段代码演变成更加传统的 .NET 版本的话,可以多走一步。

    我前面们提到过,函数类型类似于有一个单独方法的接口。两个函数组合成的一个记录与两种方法的接口非常相似,这就不奇怪了。在 C# 中,你几乎可以肯定使用一个接口来实现这种设计,F# 让我们做同样的事情。

    类似于成员,接口在创建强大的应用程序,或可重复使用的 .NET 库时,更加重要。如果我们使用一个接口,我们不说应该如何实现。在我们写应用程序时,这给了我们很大的灵活性。在这一章的后面,我们将讨论在 F# 中实现接口的方法。开发一个应该从 C# 中调用的 .NET 库时,接口非常有用。如果我们在 F# 中声明接口,C# 代码将把它看作为一个普通的接口。另一方面,有函数作为成员的 F# 的记录类型,看起来像一个类,有一些难以使用类型的属性。让我们看一下如何能把一个记录类型改编成接口,而我们仍然以 F# 自然的方式使用它。

你可能感兴趣的:(using,解决方案,休闲,功能,records)