in reply to [Perl 6] Returning Multiple Values

Thanks, exiting stuff!

Here is what I found, when trying to parse it.

near the end of first section All functions return a Capture before the summary:
s{re-capures}{re-captures}xms

next sentence:
in mean one of \( $ foo )) the braces don't match.

In section Passing values out of the function, second code clock:
one additional sentence about PRE would be nice (a precondition probably).

In section Accepting values returned to you, second code block:
my (Str $y, Int $x) := ret-test'(4),  # ($y,$x) gets (1,'Smith'), WRONG
statement ends with a comma instead of a semicolon.

Something here is wrong with the first and third call
my (Str $y, Int $x) := ret-test'(5);  # y=>'Smith', x=>1, so OK versus
my (Str $y, Int $x) := ret-test'(5);  # ($x,$y) gets (1,'Smith'), WRONG
because the same invocation cannot be OK and WRONG at the same time, I think.

Also see second and forth invocation, the comments of both lines contradict each other. First y gets 1, then x gets 1
my (Str $y, Int $x) := ret-test'(4),  # ($y,$x) gets (1,'Smith'), WRONG
versus
my (Str $y, Int $x) := ret-test'(4);  # ($x,$y) gets (1,'Smith'), WRONG

The comments of the third and forth call reverse the order of x and y compared to the first two invocations.

Replies are listed 'Best First'.
Re^2: [Perl 6] Returning Multiple Values
by John M. Dlugosz (Monsignor) on Aug 10, 2008 at 04:48 UTC
    Many thanks. The last things you found were due to copy-paste of the lines without removing the PRIME from the function name. I intended to show that the function with the signature behaves differently than the same function body without the signature.

    Thanks for the close reading. After a while all those commas and stuff just blur together for me.

    —John

      You're welcome!

      I saw your corrections, but there is one point left I think.

      In section Accepting values returned to you in the first invocation using ret-test'(5) the result of ($x gets 1 and $y gets 'Smith') is OK (according to the comment),

      my (Str $y, Int $x) := ret-test'(5); # y=>'Smith', x=>1, so OK
      then in the third invocation the same result (as the comment suggests) is WRONG.
      my (Str $y, Int $x) := ret-test(5); # ($x,$y) gets (1,'Smith'), WRONG
      So i assume it is WRONG but the comment has $x and $y (or the list values) swapped. And probably the same for the forth invocation.
        The first calls ret-test-PRIME, which has the signature removed. But you are right, the comment is reversed.

        Worse than cut and paste: when trying to design the exact rules, it was different earlier. The use cases for pitfalls became the examples for why the Capture is reformed according to the Signature.

        I think I skimmed over the code block when proofing, too. I want to explain that better in prose.

        —John