Hi Brad,

How far should I follow the rule that I should not use a smartmatch in a
where clause?

I'm thinking of this:

> sub test1(:@array? where Str) { say 'ok' }
&test1
> test1()
Constraint type check failed in binding to parameter '@array'; expected
anonymous constraint to be met but got Array ($[])
  in sub test1 at <unknown file> line 1
  in block <unit> at <unknown file> line 1

> sub test2(:@array? where .all ~~ Str) { say 'ok' }
&test2
> test2()
ok

The where clause in test1() doesn't work, but is the clause in test2()
dangerous (action at a distance)? Should I rephrase it differently?

On Mon, Mar 4, 2019 at 5:29 AM Brad Gilbert <b2gi...@gmail.com> wrote:

> The `where` clause is already a smart-match, adding `~~` to it is not
> only redundant, it can cause confusing action at a distance.
> (By that I mean the right side of `where` is exactly the same as the
> right side of `~~`)
>
> You wouldn't write this:
>
>     * ~~ (* ~~ 1|2|4|8|16)
>
> So don't write this either:
>
>     … where * ~~ 1|2|4|8|16
>
> ---
>
> It should be
>
>     sub mysub(Int $value where 1|2|4|8|16)
>    {
>       say "Got $value"
>     }
>
> On Sun, Mar 3, 2019 at 4:16 AM Fernando Santagata
> <nando.santag...@gmail.com> wrote:
> >
> > Hi Todd,
> > is this what you're looking for?
> >
> > sub mysub(Int $value where * ~~ 1|2|4|8|16)
> > {
> >   say "Got $value"
> > }
> >
> > mysub 2; # Got 2
> > mysub 3; # Constraint type check failed in binding to parameter
> '$value'; expected anonymous constraint to be met but got Int (3)
> >
> > On Sun, Mar 3, 2019 at 11:09 AM ToddAndMargo via perl6-users <
> perl6-us...@perl.org> wrote:
> >>
> >> Hi All,
> >>
> >> I want to pass an integer to a sub.  The only
> >> valid values of the integer are 1, 2, 4, 8, and 16.
> >>
> >> Other than using "if" to test their values, is
> >> there a way to state that an integer can only
> >> have certain predefined values?
> >>
> >> Many thanks,
> >> -T
> >>
> >> --
> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >> Having been erased,
> >> The document you're seeking
> >> Must now be retyped.
> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >
> >
> >
> > --
> > Fernando Santagata
>


-- 
Fernando Santagata

Reply via email to