Hi Tadzik and timo, Timo: Thanks for pointing information in synopsis. Now I understand why it works this way.
Tadzik: Actually I used this as a feature in my https://github.com/teodozjan/lacuna-cookbuk and was afraid that it will stop working with some rakudo update but StrictConstructor in some other cases may be a great idea. On Tue, May 27, 2014 at 9:04 PM, Tadeusz Sośnierz <tadeusz.sosni...@onet.pl> wrote: > On 05/25/2014 09:50 AM, Kamil Kułaga wrote: >> >> Hi, >> >> My question is about passing parameters to .new method that do not >> correspond to any field in class. This example; >> >> use v6; >> >> class PersonalId{ >> has Int $.number; >> has Str $.full_name; >> } >> >> my Hash $p; #just because i'm scared of pair conversions >> $p{"number"} = 13123123123; >> $p{"full_name"} = "John Doe"; >> $p{"age"}=64; >> $p{"shoesize"}=44; >> >> say PersonalId.new(|%($p)).perl; >> # PersonalId.new(number => 13123123123, full_name => "John Doe") >> >> Works perfectly fine but I don't know whether I can rely on that. S12 >> speaks only about type objects: (It is allowed to pass type objects >> that don't correspond to any parent class.) > > > Hello Kamil, > Why the behaviour above is correct and documented, you may find it bug-prone > or inconvenient. To address that, I've ported MooseX::StrictConstructor to > Perl 6[1]. Here's example usage demonstrated on a piece of code similar to > yours: > > use v6; > use ClassX::StrictConstructor; > > class PersonalId does ClassX::StrictConstructor { > has Int $.number; > has Str $.full_name; > } > > PersonalId.new(number => 7, > full_name => "Edgar Poe", > yada => 'yada'); > # Output: > # The following attributes are not declared for type PersonalId: yada > # in method new at /yada/yada/StrictConstructor.pm:32 > # in block at test.pl:9 > > It may come to your liking :) > > Best regards, > Tadeusz Sośnierz > > > [1] https://github.com/tadzik/ClassX-StrictConstructor -- Pozdrawiam Kamil Kułaga