class Stash
class Stash is Hash { }
A Stash
is a hash that is used for symbol tables at the package scoping level
in Raku.
To get a Stash, you can call the .WHO
pseudo-method on a package (because it
answers the question who lives here?), or if you write the package name as
a literal, append two colons:
class Boring {
class Nested { };
our sub package_sub { }
my sub lexical { };
method a_method() { }
}
say Boring::.^name; # OUTPUT: «Stash»
say Boring.WHO === Boring::; # OUTPUT: «True»
Since it inherits from Hash, you can use all the usual hash functionality:
say Boring::.keys.sort; # OUTPUT: «(&package_sub Nested)»
say Boring::<Nested>; # OUTPUT: «(Nested)»
As the example above shows only "our"-scoped things appear in the Stash
(nested classes are "our" by default, but can be excluded with "my".) Lexicals
and methods are not included in a Stash, since they do not live in the package
table. Lexicals live in a separate lexical pad, which is only visible from
inside the scope. Methods (in the case that the package is also a class) have
a separate method table, and are accessible through introspection on the
class itself, via .can
and .^methods
.