簡體   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