class ValueObjAt

Unique identification for value types

class ValueObjAt is ObjAt { }

A subclass of ObjAt that should be used to indicate that a class produces objects that are value types (in other words: are immutable after they have been initialized.

my %h = => 42;        # mutable Hash 
say %h.WHICH;           # OUTPUT: «ObjAt.new("Hash|1402...888")␤» 
 
my %m is Map = => 42# immutable Map 
say %m.WHICH;           # OUTPUT: «ValueObjAt.new("Map|AAF...09F61F")␤»

If you create a class that should be considered a value type, you should add a WHICH method to that class that returns a ValueObjAt object, for instance:

class YourClass {
    has $.foo;  # note these are not mutable 
    has $.bar;
 
    method WHICH() {
        ValueObjAt.new("YourClass|$!foo|$!bar");
    }
}

Note that it is customary to always start the identifying string with the name of the object, followed by a "|". This to prevent confusion with other classes that may generate similar string values: the name of the class should then be enough of a differentiator to prevent collisions.

Type Graph

Type relations for ValueObjAt
perl6-type-graph ValueObjAt ValueObjAt ObjAt ObjAt ValueObjAt->ObjAt Mu Mu Any Any Any->Mu ObjAt->Any

Expand above chart

Routines supplied by class ObjAt

ValueObjAt inherits from class ObjAt, which provides the following routines:

(ObjAt) infix eqv

Defined as:

multi sub infix:<eqv>(ObjAt:D $aObjAt:D $b)

Returns True if the two ObjAt are the same, that is, if the object they identify is the same.

my @foo = [2,3,1];
my @bar := @foo;
say @foo.WHICH eqv @bar.WHICH# OUTPUT: «True␤»