William Michels<[email protected]> wrote:
> I went over this with Joe as well, and I was
> equally confused.
Part of our trouble was we were playing around with the
routine form of comb (rather than the Str method), which
had a bug in it with the :match option (which lizmat just fixed).
Even when we tried the Right Thing it was still going wrong.
But then, like I was saying at the time, I really needed to
re-read the material on subroutine signatures-- I wasn't
even sure if the ":match" flag was supposed to be positional
or not-- a point Yary picked up on.
> So if I understand what you're
> saying correctly, if we see something like "Bool
> :$match" that says we should drop the dollar-sign
> ($) and enter ":match" to set "Bool" = True, and
> thus return the list of match objects?
Something like that. The ":$match" declares a variable named
$match for use inside the routine-- it also makes it a little
simpler to work with an input variable also named $match.
Take this as an example:
sub doom_flag (Bool :$flag) {
if $flag { # declared by the sub signature, no "my $flag"
say "The flag is UP"
} else {
say "The flag is down."
}
}
doom_flag(); # The flag is down.
# All of the following invocations say:
# The flag is UP
doom_flag( flag => True );
doom_flag( :flag );
my $flag = True;
doom_flag( flag => $flag );
doom_flag( :$flag );
That last one is a funny short-cut for entering a Pair that's built-in
to Raku: it's pretty common when you're working with named arguments to
end up with code that looks redundant, like this:
make_connection(
ip => $ip,
user => $user,
pw => $pw
);
But you could just use "colon-pair"s and do it like this:
make_connection( :$ip, :$user, :$pw );
Does this make more sense? There's a few different idiomatic short-cuts
here that I think are supposed to seem similar and suggest each other...
On 11/16/19, William Michels <[email protected]> wrote:
> Hi Yary,
>
> I went over this with Joe as well, and I was equally confused. So if I
> understand what you're saying correctly, if we see something like
> "Bool :$match" that says we should drop the dollar-sign ($) and enter
> ":match" to set "Bool" = True, and thus return the list of match
> objects?
>
> On another note (or possibly the same note), I tried code similar to
> Joe's with fair success. I was able to get the REPL to understand a
> "True" or "False" parameter, but never in conjunction with a "$limit"
> parameter. Is this the correct behaviour, and why?
>
>> #REPL
> Nil
>> say comb(/\w/, "a;b;c", False).perl;
> ().Seq
>> say comb(/\w/, "a;b;c", True).perl;
> ("a",).Seq
>> say comb(/\w+/, "a;b;c", True).perl;
> ("a",).Seq
>> say comb(/\w+/, "a;b;c", 2).perl;
> ("a", "b").Seq
>> say comb(/\w+/, "a;b;c", 3).perl;
> ("a", "b", "c").Seq
>> say comb(/\w+/, "a;b;c", 4).perl;
> ("a", "b", "c").Seq
>> say comb(/\w+/, "a;b;c", True).perl;
> ("a",).Seq
>> say comb(/\w+/, "a;b;c", 2, True).perl;
> Too many positionals passed; expected 2 or 3 arguments but got 4
> in block <unit> at <unknown file> line 1
>
>> say comb(/\w+/, "a;b;c", 2, :True).perl;
> Unexpected named argument 'True' passed
> in block <unit> at <unknown file> line 1
>
>> $*VM
> moar (2019.07.1)
>
> Any help appreciated, Bill.
>
>
>
>
> On Mon, Nov 11, 2019 at 9:46 AM yary <[email protected]> wrote:
>>
>> The syntax is in the declaration you pasted in your email
>>
>> > multi sub comb(Regex:D $matcher, Str:D $input, $limit = Inf, Bool
>> > :$match)
>>
>> The colon in "Bool :$match" makes it a named argument. Not sure where
>> definitive docs are, decent starting point is
>> https://docs.perl6.org/type/Signature#Positional_vs._named_arguments
>>
>>
>> -y
>>
>>
>> On Sun, Nov 10, 2019 at 11:18 PM Joseph Brenner <[email protected]>
>> wrote:
>>>
>>> Thanks, that form does what I want--
>>>
>>> I don't see how I could've understood that from the docs, though.
>>> For example, I don't see any place where the :match adverb is
>>> mentioned for either the method or routine form of comb.
>>>
>>>
>>>
>>> On 11/10/19, Elizabeth Mattijsen <[email protected]> wrote:
>>> > dd "foobar".comb(/./, :g, :match);
>>> > (「f」 「o」 「o」 「b」 「a」 「r」)
>>> >
>>> >> On 10 Nov 2019, at 23:46, Joseph Brenner <[email protected]> wrote:
>>> >>
>>> >> Can someone give me an example of how to use the comb routine to
>>> >> return a list of match objects?
>>> >>
>>> >> The documentation here:
>>> >>
>>> >> https://docs.perl6.org/type/Str#routine_comb
>>> >>
>>> >> Mentions a boolean option to get match objects:
>>> >>
>>> >>> If $matcher is a Regex, each Match object is
>>> >>> converted to a Str, unless $match is set.
>>> >>
>>> >> I gather that I must be reading this signature
>>> >> wrong somehow, I can't get it to work:
>>> >>
>>> >>> multi sub comb(Regex:D $matcher, Str:D $input, $limit = Inf, Bool
>>> >>> :$match)
>>> >>
>>> >> I keep trying variations of things like this:
>>> >>
>>> >> my @hits = comb(m/$search_pattern/, $chunk, 100, True);
>>> >
>