Re: RFC 171 (v2) my Dog $spot should call a constructor implicitly

[email protected] (Piers Cawley)
Newsgroups perl.perl6.language.objects
Message-ID <[email protected]>
Nathan Wiger <[email protected]> writes:

> First off, I think everyone is reading this RFC with the wrong mindset,
> forgetting the concept of embedded objects in Perl 6.

Ah, that dumb idea again.

> I believe the idea would be that CREATE is a *fundamental* method, like
> DESTROY, that would do basic declaration, creation, allocation, etc. So:
> 
>    my Dog $spot;
>    print ref $spot;    # 'Dog'
>    $spot = new Dalmation;
> 
> No reason this wouldn't still work. The term 'constructor' here is
> misleading. 'creator' is what I prefer, and that's also why I prefer
> CREATE.

But you're creating the wrong bloody thing. And then you're throwing
it away. Now that's what I call a win. In this scenario what will

   my Dog $spot; 
   print defined($spot)

return? If it's *not* 'undef' there'd better be a bloody good reason,
otherwise:

    package Hades;
    { 
        my Dog $cerberus; #There can only be one
       
        sub get_guard_dog {
            $cerberus ||= Hellhound::ThreeHeaded->new(name =>
                                                      'Cerberus');
            return $cerberus;
        }
    }

Doesn't work. Nor does any other creator of singletons come to that.

> >   - Makes factory methods impossible.
> 
> A little clarification on what specifically constitutes a "factory
> method" would be great.

See that 

    my Dog $patches = $dog_factory->make_me_a_dog

That's a factory method that is, returns a Dog of some sort, but you
don't know of what breed.

-- 
Piers
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.