如何实现一个简单的Id-Generator?

Sve*_*dos 1 f#

我有:

type Id = Id of int
let mutable IdInt = 0

let idGenerator = 
    fun _ ->
        IdInt <-  IdInt + 1
        IdInt |> Id
Run Code Online (Sandbox Code Playgroud)

然后被称为例如:

 printfn "%A" (idGenerator())
Run Code Online (Sandbox Code Playgroud)

在 F# 中生成简单的增量 ID 的最佳实践是什么?

Tom*_*cek 5

你的实现几乎就是我会做的。有两件事我会改变:

  • 将内联函数的参数定义为单元,这样就不会混淆它的类型
  • 将可变IdInt 变量保持在本地,idGenerator以便将其隐藏(您也可以camelCase为它使用更惯用的命名)

所以,我稍微修改的版本是:

let idGenerator = 
    let mutable idInt = 0
    fun () ->
        idInt <-  idInt + 1
        idInt |> Id
Run Code Online (Sandbox Code Playgroud)

在某些情况下,将其设为创建新生成器的函数也很有用(如果您想要拥有更多本地生成器而不是一个全局生成器):

let makeIdGenerator () = 
    let mutable idInt = 0
    fun () ->
        idInt <-  idInt + 1
        idInt |> Id

let idGen1 = makeIdGenerator ()
let idGen2 = makeIdGenerator ()
Run Code Online (Sandbox Code Playgroud)

两个生成器会独立生成从 1 开始的 ID。它们是独立的,因为idInt变量现在是本地的,所以它不会被两个生成器共享。