繁体   English   中英

F#地图和不同的对象

[英]F# map and distinct objects

我有一些非描述性但截然不同的对象(特别是逻辑表达式中的未命名变量),我想放入一个映射中,以将它们与其值相关联。 据我了解,地图需要通过一些有序字段来区分对象,所以我不能只拥有

type Term =
...
| Var

因为这将不允许将不同的变量区分开。 相反,我大概可以

type Term =
...
| Var of int64

然后具有一个new_var函数,该函数将全局int64计数器递增,并返回具有递增值的新变量。 这似乎有些微不足道,但应该可以。

建议使用全局计数器来处理此问题,还是有一种更惯用的方法?

这实际上不是“必须区分对象的映射”的事情-当您声明这样的类型时:

type Term = 
    | Var

您有一个具有单个有效值的类型Var 如果您要说的是要有不同的对象,那不是您想要的。 您仍然可以将这种类型用作地图中的键-尽管不是一个特别有用的键,因为它最多只有一个元素。

使用计数器是处理它的一种好方法。 如果您不希望使用“全局”函数,则可以使用ref单元将其滚动到一个函数中来保存它:

type Term = 
    | Var of int

let make = 
    let counter = ref 0
    fun () ->
        counter := !counter + 1
        Term.Var (!counter)

如果您不关心这些值并希望计数器不显示图片,则可以使用GUID:

 type Term = 
     | Var of System.Guid

 let make () = 
     Term.Var (System.Guid.NewGuid())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM