Okay, I opened a github issue: https://github.com/rakudo/rakudo/issues/3421
On 1/13/20, Vadim Belman <vr...@lflat.org> wrote: > At a quick glance, looks like a bug to me. Worth opening a ticket on > https://github.com/rakudo/rakudo > > Best regards, > Vadim Belman > >> On Jan 12, 2020, at 8:15 PM, Joseph Brenner <doom...@gmail.com> wrote: >> >> Moving the definition of the subset outside of the class >> covers for the weird behavior... >> >> my @allowed = << alpha beta gamma delta >>; >> my @default = << alpha >>; >> subset Allowed of Str where * eq any( @allowed ); >> >> class HasSubset { >> has Allowed @.grk = @default; >> method echo_grk { >> say @!grk.join(" | "); >> } >> } >> >> my $obj = HasSubset.new(); >> $obj.echo_grk(); >> >> my $obj2 = HasSubset.new( grk => << alpha beta gamma >> ); >> $obj2.echo_grk(); >> >> my $obj3 = HasSubset.new( grk => << alpha beta rutabaga >> ); >> $obj3.echo_grk(); >> # value 'rutabaga' fails as expected: >> # Type check failed in assignment to @!grk; expected >> HasSubset::Allowed but got Str ("rutabaga") >> >> >> On 1/12/20, Joseph Brenner <doom...@gmail.com> wrote: >>> Here's a code snippet that tries to use a subset to constrain the >>> values of an object field (i.e. declared with has). As written, this >>> code works, but only when there's what looks like an irrelevant >>> experimental line in it (labeled "WEIRD ONE"), when that line is >>> commented out it throws an error... >>> >>> class HasSubset { >>> my @allowed = << alpha beta gamma delta >>; >>> my @default = << alpha >>; >>> >>> subset Allowed of Str where * eq any( @allowed ); >>> >>> my Allowed $experiment = 'delta'; # WEIRD ONE this line is >>> *needed* to get the following to work... >>> >>> has Allowed @.greek = @default; >>> >>> method echo_greek { >>> say @!greek.join(" | "); >>> } >>> } >>> >>> my $obj = HasSubset.new(); >>> $obj.echo_greek(); >>> >>> # As written, prints the default: 'alpha' >>> # Without the WEIRD ONE line, you see errors like: >>> ## Type check failed in assignment to @!greek; expected >>> HasSubset::Allowed but got Str ("alpha") >>> >> > >