[英]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.