"is copy" is what I wanted to allow modifying MAIN's passed-in values. "is
rw" correctly rejects constants.
sub MAIN(Int $value is copy where ($value .= Int) ∈ (1,2,4,8,16)) {say
"\$value.perl = ",$value.perl }
# says $value.perl = 4
-y
On Sun, May 12, 2019 at 5:02 PM yary wrote:
> On #perl6
On #perl6 Int(IntStr) will not coerce because IntStr is already
an Int; coercions will only fire if the type doesn't match, like with Array
and Hash for example
IntStr is a subclass of Int thus no coercion needed to set $value. A
catch-22 if each right side element is Int as opposed to IntStr,
Side note, using the angle brackets creates IntStr objects, which in some
cases is harmless, sometimes necessary.
> say <1 2 4 8 16 >.perl
(IntStr.new(1, "1"), IntStr.new(2, "2"), IntStr.new(4, "4"), IntStr.new(8,
"8"), IntStr.new(16, "16"))
> say (1,2,4,8,16).perl
(1, 2, 4, 8, 16)
That's
El Sunday, 03 de March del 2019 a les 02:09, ToddAndMargo via perl6-users va
escriure:
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
On Mon, Mar 4, 2019 at 8:22 AM Brad Gilbert wrote:
...
> Somewhere on the Internet I layed out the rules that I think that
> should normally be followed, but I am not sure where.
...
It would be nice to find it and add to the docs.
-Tom
An Array isn't a type of Str.
@ ~~ Str; # False
Array ~~ Str; # False
You can have an array that has a type constraint.
(my Str @) ~~ Array[Str]; # True
(my @ of Str) ~~ Array[Str]; # True
Or you could check that all of the values of the Array are of some type.
(my @ = )
On 3/3/19 8:29 PM, Brad Gilbert wrote:
It should be
sub mysub(Int $value where 1|2|4|8|16)
{
say "Got $value"
}
:-)
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
On Sun, Mar 3, 2019 at 11:41 AM ToddAndMargo via perl6-users <
perl6-users@perl.org> wrote:
> That way I can catch bad values at compile time and not have
> to wait and see what it gets fed.
>
The snippet I showed you doesn't intercepts wrong values at compile time,
but rather at run time.
--
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
10 matches
Mail list logo