"Abstract supertype of objects which associate values
with keys. `Correspondence` does not satisfy `Category`,
since in some cases—`List`, for example—it is
convenient to consider the subtype a `Category` of its
values, and in other cases—`Map`, for example—it
is convenient to treat the subtype as a `Category` of its
entries.
The item corresponding to a given key may be obtained
from a `Correspondence` using the item operator:
value bg = settings[\"backgroundColor\"] else white;
The `get()` operation and item operator result in an
optional type, to reflect the possibility that there is
no item for the given key."
see (`interface Map`, `interface List`, `interface Category`)
by ("Gavin")
shared interface Correspondence<in Key, out Item>
given Key satisfies Object {
"Returns the value defined for the given key, or
`null` if there is no value defined for the given
key."
see (`function Correspondence.items`)
shared formal Item? get(Key key);
"Determines if there is a value defined for the
given key."
see (`function Correspondence.definesAny`,
`function Correspondence.definesEvery`,
`value Correspondence.keys`)
shared default Boolean defines(Key key) =>
get(key) exists;
"The `Category` of all keys for which a value is
defined by this `Correspondence`."
see (`function Correspondence.defines`)
shared default Category keys => Keys(this);
"Determines if this `Correspondence` defines a value
for every one of the given keys."
see (`function Correspondence.defines`)
shared default Boolean definesEvery({Key*} keys) {
for (key in keys) {
if (!defines(key)) {
return false;
}
}
else {
return true;
}
}
"Determines if this `Correspondence` defines a value
for any one of the given keys."
see (`function Correspondence.defines`)
shared default Boolean definesAny({Key*} keys) {
for (key in keys) {
if (defines(key)) {
return true;
}
}
else {
return false;
}
}
"Returns the items defined for the given keys, in
the same order as the corresponding keys."
see (`function Correspondence.get`)
shared default Item?[] items({Key*} keys) =>
[ for (key in keys) get(key) ];
}