>From S09: "The default hash iterator is a property called .iterator
that can be user replaced. When the hash itself needs an iterator for
.pairs, .keys, .values, or .kv, it calls %hash.iterator() to start
one. In item context, .iterator returns an iterator object. In list
context, it returns a lazy list fed by the iterator."

Would it be reasonable to allow hashes to use .[] syntax as something
of a shortcut for ".iterator in list context", thus allowing
autosorted hashes to partake of the same sort of dual cardinal/ordinal
lookup capabilities that lists with user-defined array indices have?
e.g.:

  my %point{Int};
  %point{3} = "Star";
  say %point[0]; # same as 'say %point{3}'
  say %point[1]; # error: asking for the second of one key is nonsense.
  %point{-2} = "Base";
  say %point[0]; # same as 'say %point{-2}'
  say %point[1]; # same as 'say %point{3}'

Mind you, this could get messy with multidimensional keys:

  my %grid{Int;Int};
  %grid{3;-2} = "Star";
  %grid{-2;3} = "Base";
  say %grid[0;1]; # "Base"
  say %grid[1;0]; # "Star"
  say %grid[0;0]; # error? %grid{-2;-2} has never had anything assigned to it.

Still, it could be useful to be able to access an autosorted hash's
keys in an ordinal fashion.

Side issue: S09 doesn't specify whether or not you need to explicitly
declare a hash as autosorted.  I'm assuming that the parser is
supposed to figure that out based on whether or not .iterator is ever
used; but it isn't immediately obvious from reading the "Autosorted
hashes" section.  As well, there might be times when explicitly
declaring a hash as autosorted (or not) might be useful for
optimization purposes.

-- 
Jonathan "Dataweaver" Lang

Reply via email to