( に加えてall_values()
)別の可能な解決策は、リフレクションを使用することです。が与えられたrf_enum
場合、そのメソッドを呼び出してget_items()
、すべての列挙項目のリストを取得できます。
ただし、refleciton ソリューションと にはいくつかの相違点がありall_values()
、知っておくことが重要です。違いの 1 つは、一部の列挙項目に明示的な数値が与えられた場合 (必ずしも昇順であるとは限らない)、 は昇順でall_values()
値を返しますがrf_enum.get_items()
、宣言の順序で項目を返すことです。たとえば、次の場合:
type foo: [A=5, B, C=1, D];
次にall_values(foo)
、C、D、A、B を (この順序で - それぞれの数値 1、2、5、6 に従って)rf_manager.get_type_by_name("foo").as_a(rf_enum).get_items()
返しますが、A、B、C、D を返します。リフレクション結果を並べ替えたい場合数値によって、たとえば、行うことができますrf_manager.get_type_by_name("foo").as_a(rf_enum).get_items().sort(it.get_value())
。
もう 1 つの違いは、生成サブ範囲が異なる複数の列挙型が相互に基づいている場合all_values()
、特定の型はその型の生成範囲に属する値のみを返しますが、rf_enum.get_items()
すべてのアイテムを返すことです。例えば:
type t1: [A, B, C, D];
type t2: t1[A..B];
type t3: t2;
extend t2: [E];
この例でrf_enum.get_items()
は、t1、t2、または t3 のいずれかに対して A、B、C、D、E を返します。ただしall_values()
、各タイプの生成範囲に応じて、異なる結果が得られます。all_values(t1)
A、B、C、D を返します。all_values(t2)
A、B、E を返します。A 、all_values(t3)
Bを返します。