我可以处理另一个,而不是干净的方式,但希望能够利用以下内容:
type Prefix is (Yocto, Zepto, Atto, Femto, Pico, Nano,
Micro, Milli, Centi, Deci, None, Deca, Hecto, Kilo,
Mega, Giga, Tera, Peta, Exa, Zetta, Yotta);
for Prefix use (
Yocto => -24,
Zepto => -21,
Atto => -18,
Femto => -15,
Pico => -12,
Nano => -9,
Micro => -6,
Milli => -3,
Centi => -2,
Deci => -1,
None => 0,
Deca => 1,
Hecto => 2,
Kilo => 3,
Mega => 6,
Giga => 9,
Tera => 12,
Peta => 15,
Exa => 18,
Zetta => 21,
Yotta => 24);
Run Code Online (Sandbox Code Playgroud)
GNAT不会抱怨代理条款.但是,我似乎无法真正获得价值,因为我所知道的与此相关的唯一属性与位置有关,而不是赋值.
枚举从来没有用于此类目的,您不应该尝试使用它们.(我认为主要目的是定义在某些外部表示或硬件寄存器或其他东西中具有除0,1,......之外的值的枚举.)但是,您实际上可以在保持代码几乎相同的情况下解决此问题:
type Prefix is (Yocto, Zepto, Atto, Femto, Pico, Nano,
Micro, Milli, Centi, Deci, None, Deca, Hecto, Kilo,
Mega, Giga, Tera, Peta, Exa, Zetta, Yotta);
type Prefix_To_Integer_Map is array (Prefix) of Integer;
Power_of_Ten : constant Prefix_To_Integer_Map := (
Yocto => -24,
Zepto => -21,
Atto => -18,
Femto => -15,
Pico => -12,
Nano => -9,
Micro => -6,
Milli => -3,
Centi => -2,
Deci => -1,
None => 0,
Deca => 1,
Hecto => 2,
Kilo => 3,
Mega => 6,
Giga => 9,
Tera => 12,
Peta => 15,
Exa => 18,
Zetta => 21,
Yotta => 24);
Run Code Online (Sandbox Code Playgroud)
应该和你的一样干净.并说Power_Of_Ten (My_Prefix)是更具描述性比My_Prefix'Enum_Rep或Prefix'Enum_Rep(My_Prefix)或不管它是什么.