2017-10-15 116 views
0

我目前正在製作一個項目。在這個項目中,許多對象都有一個ID,用於從代碼不同部分的配置文件中獲取實體的屬性和行爲。使用枚舉作爲對象ID

我使用String作爲ID,那對我很不錯,但也存在一些問題:

  1. 的錯別字不容易被發現;

  2. 有沒有代碼完成,所以我需要記住所有的ID

我想用枚舉結構作爲對象ID。這應該解決所有這些問題。我想知道,是否有使用枚舉作爲實體標識符的缺陷?

+0

你總是可以聲明字符串常量,不是嗎?它解決了你的兩個問題。 – Sweeper

+0

我認爲這有些相當於枚舉,不是嗎? – Gulvan

+0

我對haxe瞭解不多。如果它們在haxe中是同一個事物,那就使用它。一些編程語言不允許字符串成爲枚舉的基礎值。 – Sweeper

回答

4

有使用枚舉作爲ID的不少缺陷:

  • 比較:您不能直接與==比較兩個枚舉情況下,你需要要麼使用switcha.equals(b)Type.enumEq(a,b)
  • 序列化As you can see,Json序列化並不明顯。
  • 表示:每種平臺的底層表示都不相同。

恕我直言,除了這些,主要的錯誤是,如果您添加枚舉項,枚舉表示可能會改變,因爲它們的表示包含它們在枚舉中的索引。

因此,如果將代碼從enum ID { Foo; Bar }更新爲enum ID { Zero; Foo; Bar; },Foo和Bar值將更改其索引,這可能會導致意外的行爲。

如果您計劃序列化並存儲這些值,這是一個主要問題。

我覺得你最好的選擇是使用@:enum abstract按照https://haxe.org/manual/types-abstract-enum.html

這樣,你得到兩全其美:你的ID是實際運行時的字符串,但是編譯器知道這是預期值,你會得到嚴格打字。

+0

我也推薦'@:enum abstract' – KevinResoL