does Metamodel::Namingdoes Metamodel::TypePretensedoes Metamodel::RolePunning
警告:此类是 Rakudo 实现的一部分,不属于语言规范。
有时,我们看到对提供参数但未完全解析的角色的引用。例如,在
does R[Type]
我们需要表示 R[T]
,但由于手头没有第一个参数,因此我们还不能完全专门化角色。我们还可能遇到类似这样的问题
sub foo(R[T] )if ~~ R[T]
我们显然希望讨论角色的部分参数化,并希望以一种与特定实例化不同的方式进行讨论。此元对象将这些“部分类型”表示为一种方法,既可以继续进行完全专门化,又可以进行类型检查或双关语。
此类将显示在参数化角色中。例如
[::T][::T, ::Y]for Zipi[Int], Zipi[Int,Str] -># OUTPUT:# Perl6::Metamodel::CurriedRoleHOW.new# Uses Int# Perl6::Metamodel::CurriedRoleHOW.new# Uses Int and Str
由于有几个 Zipi
变体,提供一个参数会对其进行处理,但编译器仍需要考虑 ParametricRoleGroup
找出实际实现,因此这些(部分实例化)角色会显示为 Metamodel::CurriedRoleHOW
,如示例所示;即使只有一个参数,实例化角色的类型也会相同
[::T] ;say Zape[Int].HOW; #: «Perl6::Metamodel::CurriedRoleHOW.new»
注意:与大多数 Metamodel
类一样,此类主要用于说明目的,不打算由最终用户实例化。