class Stash

Table for "our"-scoped symbols
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.

The Camelia image is copyright 2009 by Larry Wall. "Raku" is a trademark of the Yet Another Society. All rights reserved.

Built with Podlite — the markup and publishing tools behind this site.