role Associative
Object that supports looking up values by key
[::TValue = Mu, ::TKey = Str(Any)]
A common role for types that support name-based lookup through postcircumfix:<{ }>, for example Hash and Map. It is used for type checks in operators that expect to find specific methods to call. See Subscripts for details.
The %
sigil restricts variables to objects that do Associative
, so you will have to mix in that role if you want to use it for your classes.
;my := Whatever.new;# OUTPUT: «Type check failed in binding; expected Associative but got Whatever
Please note that we are using binding :=
here, since by default %
assignments expect a Hash
in the right-hand side. However, with the Associative role:
is Associative ;my := Whatever.new;
will be syntactically correct.
Methods
method of
Defined as:
method of()
Associative
is actually a parameterized role which can use different classes for keys and values. As seen at the top of the document, by default it coerces to Str
for the key and uses a very generic Mu
for value.
my ;say .of;# OUTPUT: «(Mu)»
The value is the first parameter you use when instantiating Associative
with particular classes:
is Hash does Associative[Cool,DateTime] ;my := DateHash.new;say .of; # OUTPUT: «(Cool)»
method keyof
Defined as:
method keyof()
Returns the parameterized key used for the Associative role, which is Any
coerced to Str
by default. This is the class used as second parameter when you use the parameterized version of Associative.
my ;.keyof; #OUTPUT: «(Str(Any))»
Methods that should be provided
You need to provide these methods if you want your class to implement the Associative role.
method AT-KEY
method AT-KEY(\key)
Should return the value / container at the given key.
method EXISTS-KEY
method EXISTS-KEY(\key)
Should return a Bool
indicating whether the given key actually has a value.
method STORE
method STORE(\values, :)
This method should only be supplied if you want to support the:
my is Foo = a => 42, b => 666;
syntax for binding your implementation of the Associative
role.
Should accept the values to (re-)initialize the object with, which either could consist of Pair
s, or separate key/value pairs. The optional named parameter will contain a True
value when the method is called on the object for the first time. Should return the invocant.
See also
See Methods to implement for positional subscripting for information about additional methods that can be implemented for the Associative
role.