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