On Tue, Jan 21, 2020 at 07:16:17PM -0800, Todd Chester via perl6-users wrote:
> 
> 
> On 2020-01-21 18:57, Tom Browder wrote:
> > On Tue, Jan 21, 2020 at 18:34 Todd Chester via perl6-users
> > <perl6-us...@perl.org <mailto:perl6-us...@perl.org>> wrote:
> > 
> >     On 2020-01-21 16:09, Todd Chester via perl6-users wrote:
> >      >> 4) A block (that is the { ... } bit) will always 'return' the last
> >      >> expression evaluated.
> >      >
> >      > Seems to me I have see the last expression returned even without
> >      > the {...}.  Maybe I am misremembering.
> > 
> > 
> > Todd, the {} is the block defining the subroutine.
> > 
> >       > sub AplusB( $a, $b --> Int ){$a+$b;}
> > 
> > 
> > The above is the sub's definition.
> > 
> > 
> > 
> >     &AplusB
> > 
> > 
> > The above should generate an error because the mandatory args are
> > missing, depending on the context (don't quote me on that).
> 
> &AplusB is printer out by REPL.  I don't know why.  REPL
> does that a lot.

The REPL tells you that the result of the expression you entered (the
sequence of characters "sub AplusB......{$a+$b}") was to define
a subroutine called "AplusB", which is what you wanted it to do.
The "&" sigil (a sigil is basically the character before a thing's name in
Raku and Perl 5) means that the name "AplusB" refers to a subroutine,
not a variable or anything else.

> >       > AplusB 2, 3
> >     5
> > 
> > The above shows the sub being called with the required two args, and the
> > 5 is the returned value which is probably shown in the REPL since there
> > is no semicolon after the call and the 5 is not usually seen otherwise.
> 
> $ p6 'sub AplusB( $a, $b --> Int ){$a+$b}; say AplusB 2, 3;'
> 5
> 
> 
> > -Tom
> 
> Hi Tom,
> 
> I was trying to cut things down to the simplest terms.
> I was responding to Richard's statement
> 
>  >> 4) A block (that is the { ... } bit) will always 'return' the last
>  >>    expression evaluated.
> 
> I created a sub without the "{...}" and showed where it would
> return the last equation without the "{...}".  I may have
> misunderstood Richard.

You created a sub with "$a+$b" in a "{...}" block. The "{$a+$b}"
sequence of characters in what you typed is the "{...}" block that
Richard is referring to - a block that starts with a "{" character, ends
with a "}" character and contains a series of Raku expressions
separated by semicolons.

In your case the block only contains a single expression, "$a+$b", which
represents the sum of the two arguments to the subroutine - this is
*exactly* what Richard meant. If you were trying to illustrate his point
that a block without an explicit "return" statement would return
the last expression, you succeeded. If you were trying to demonstrate
something that does not have a "{...}", well, nope, "{$a+$b}" is exactly
the "{...}" that he was talking about, so the fact that AplusB returns
the sum of $a and $b is exactly what he meant.

G'luck,
Peter

-- 
Peter Pentchev  roam@{ringlet.net,debian.org,FreeBSD.org} p...@storpool.com
PGP key:        http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint 2EE7 A7A5 17FC 124C F115  C354 651E EFB0 2527 DF13

Attachment: signature.asc
Description: PGP signature

Reply via email to