变量具有丰富的编译时信息,但在运行时,对变量的访问通常作用于其中存储的值,而不是变量本身。变量的运行时类是 Scalar
。
类 Variable
保存特性可用于内省和操作变量的编译时信息。
特性§
特性为默认值§
设置变量初始化时的默认值,以及在向其分配 Nil
时重置为该值。特性参数在编译时求值。闭包不会执行您期望的操作:它们按原样存储,需要手动调用。
my Int is default(42);say ; # OUTPUT: «42»= 5;say ; # OUTPUT: «5»# explicit reset:= Nil;say ; # OUTPUT: «42»
特性 is default
还可以与数组和哈希等下标元素一起使用
my is default( 'N/A' );[22].say; # OUTPUT: N/A= Nil;.say; # OUTPUT: [N/A][4].say; # OUTPUT: N/Amy is default( 'no-value-here' );<non-existent-key>.say; # OUTPUT: no-value-here<foo> = 'bar';<>.say; # OUTPUT: {foo => bar}<wrong-key>.say; # OUTPUT: no-value-here
特性为动态§
multi trait_mod:<is>(Variable, :)
将变量标记为动态,即,可以从内部动态作用域访问,而无需位于内部词法作用域中。
sub introspect()my is dynamic = 23;introspect; # OUTPUT: «23»
is dynamic
特性是创建和访问动态变量的一种相当繁琐的方式。一种更简单的方法是使用 * twigil
sub introspect()my = 23;introspect; # OUTPUT: «23»
特性为§
multi trait_mod:<of>(Mu , Mu )
设置绑定到变量的容器的类型约束。
my of Int = 42;= "forty plus two";CATCH# OUTPUT: «X::TypeCheck::Assignment Type check failed in assignment to $i; expected Int but got Str ("forty plus two")»
您可以使用编译时定义的任何值作为类型约束,包括常量
constant \T = Int;my of T = 42;
这等效于前面的定义。
方法§
方法名称§
method name(Variable: str)
返回变量的名称,包括符号。