Jon Lang wrote:

> Personally, I don't think that it should be a public method: one thing
> about junctions is that you can use them interchangeably with ordinary
> scalars; giving them a public method breaks that.  In particular, code
> that makes use of a Junction public method would break if you were to
> hand it a non-Junction.

On the other hand, I would argue that, because non-junctive scalars are
just an (uninteresting ;-) special degenerate case of junctions, they
should have a public .eigenvalues() too!  It would, of course, just return
their uninteresting degenerate special-case scalar value.

Alternatively, I would note that Perl 6 already provides a perfectly
good way to handle this issue. If you're calling $someval.eigenvalues(),
you're inherently assuming that you're calling it on a Junction. If
there's any possibility that what you're calling it on *isn't* a
junction, then you should either be unsurprised to get the exception that will
be thrown, or else you should explicitly cater to the possibility with:

     my @values = $val.?eigenvalues;

or perhaps:

     my @values = $val.?eigenvalues // $val;

Although, if that second form is to become the standard "safe" approach,
that argues to me that non-junctions ought to have a .eigenvalues() too,
so that the first alternative above just DWIMs.


BTW, given Larry's recent clarification about Sets producing a list of
their keys in list context, I have absolutely no objection to
.eigenvalues() returning a Set, rather than a List. Indeed, I think it
would be even more valuable that way.

Damian

Reply via email to