does Metamodel::Namingdoes Metamodel::Documentingdoes Metamodel::Stashingdoes Metamodel::AttributeContainerdoes Metamodel::MethodContainerdoes Metamodel::MultiMethodContainerdoes Metamodel::RoleContainerdoes Metamodel::BaseTypedoes Metamodel::MROBasedMethodDispatchdoes Metamodel::MROBasedTypeCheckingdoes Metamodel::BUILDPLANdoes Metamodel::BoolificationProtocoldoes Metamodel::REPRComposeProtocoldoes Metamodel::Mixins
警告:此类是 Rakudo 实现的一部分,不属于语言规范。
Metamodel::EnumHOW
是 enum
关键字背后的元类。
<1 2>;say Numbers.HOW ~~ Metamodel::EnumHOW; # OUTPUT: «True»
以下枚举声明
our Int <Warning Failure Exception Sorrow Panic>;
大致等效于使用 Metamodel::EnumHOW
方法编写的以下代码
BEGIN
方法§
方法 new_type§
method new_type(:!, :?, : = 'P6opaque', :)
为枚举创建一个新的类型对象。$name
是枚举名称,$base_type
是在使用范围声明声明枚举时给出的类型(如果有),$repr
是使用 repr
特征传递给枚举的类型表示形式。$is_mixin
未使用。
方法 add_parent§
method add_parent(, )
设置枚举的基本类型。仅当没有将基本类型传递给 .new_type
时才能使用此方法。
方法 set_export_callback§
method set_export_callback(, )
设置枚举的导出回调,在调用 .compose_values
时调用此回调。在将 export
特征应用于枚举时调用此回调。$callback
应为某种例程,不带参数,用于处理枚举值的导出。
方法 export_callback§
method export_callback()
返回由 .set_export_callback
设置的导出回调。
方法 compose§
method compose(, :)
完成枚举的类型对象。这是枚举执行的任何角色混合在一起的时候。需要在使用 .add_enum_value
添加任何枚举值之前调用此方法。
方法 is_composed§
method is_composed()
如果枚举已组合,则返回 1,否则返回 0。
方法 compose_values§
method compose_values()
调用由 .set_export_callback
设置的导出回调并将其从状态中删除。在使用 .add_enum_value
添加枚举值后应调用此方法。
方法 set_composalizer§
method set_composalizer()
设置枚举的组合器,它生成可以与另一个混合的类型。$c
应为具有以下签名的某些例程
:(, , )
方法 composalizer§
method composalizer()
返回由 .set_composalizer
设置的组合器。
方法 add_enum_value§
method add_enum_value(, )
向此枚举添加一个值。$value
应为枚举本身的一个实例,类型为 Enumeration
。
方法 enum_values§
method enum_values()
返回枚举的值。
<10 20>;say Numbers.^enum_values; # OUTPUT: {10 => 0, 20 => 1}
方法 elems§
method elems()
返回值的数量。
<10 20>;say Numbers.^elems; # OUTPUT: 2
方法 enum_from_value§
method enum_from_value(, )
给定枚举基本类型的值,返回相应的枚举。
<10 20>;say Numbers.^enum_from_value(0); # OUTPUT: 10
方法 enum_value_list§
method enum_value_list()
返回枚举值列表。
<10 20>;say Numbers.^enum_value_list; # OUTPUT: (10 20)