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

Reply via email to