does Metamodel::Documenting
警告:此类是 Rakudo 实现的一部分,不属于语言规范。
类型对象可以赋予一个类型笑脸,这是一个表示其确定性的后缀
say Any.^name; # OUTPUT: «Any:D»say Any.^name; # OUTPUT: «Any:U»say Any.^name; # OUTPUT: «Any»
尽管与 Any 共享一个类型,但 Any:U 和 Any:D 特别具有不同的类型检查行为
say Any ~~ Any; # OUTPUT: «False»say Any ~~ Any; # OUTPUT: «True»say Any ~~ Any; # OUTPUT: «True»say Any.new ~~ Any; # OUTPUT: «True»say Any.new ~~ Any; # OUTPUT: «False»say Any.new ~~ Any; # OUTPUT: «True»
这是因为 Any:D 和 Any:U 不是使用 Metamodel::ClassHOW 创建的,就像您可能期望 Any 类型对象一样,而是使用 Metamodel::DefiniteHOW 创建的。此 HOW 定义了这些确定类型对象的的行为。
以下类型声明
my Any constant Definite = Any;
大致等效于使用 Metamodel::DefiniteHOW 方法的以下代码
my Any constant Definite = Metamodel::DefiniteHOW.new_type: base_type => Any, definite => 1;
方法§
方法 new_type§
method new_type(:!, :!)
给定基本类型和确定性,创建一个新的确定类型。$definite 应为 :D 类型的 1 或 :U 类型的 0。
方法 name§
method name()
返回确定类型的名称。
方法 shortname§
method shortname()
返回确定类型的简称。
方法 base_type§
method base_type()
返回确定类型的基本类型
say Any.^base_type.^name; # OUTPUT: «Any»
方法 definite§
method definite()
如果给定的确定类型是 :D 类型,则返回 1,如果是 :U 类型,则返回 0。
方法 nominalize§
method nominalize()
为确定类型生成一个名义类型对象。这是其基本类型,如果它具有 nominalizable 原型,它也可能被名义化。
方法 find_method§
method find_method(, )
在确定类型的基本类型上查找方法。
方法 type_check§
method type_check(, )
对确定类型执行针对 $checkee 的类型检查。这将检查 $checkee 是否为其基本类型,如果匹配则返回 True,否则返回 False。例如,当确定类型位于 smartmatch 的左侧时,可以调用此元方法。
方法 accepts_type§
method accepts_type(, )
对 $checkee 执行针对确定类型的类型检查。这将检查 $checkee 是否为其基本类型并匹配其确定性,如果匹配则返回 True,否则返回 False。例如,当确定类型位于 smartmatch 的右侧时,可以调用此元方法。