On Fri, Jun 17, 2005 at 07:05:11AM +1000, Damian Conway wrote:
> Gaal Yahas wrote:
> >On Thu, Jun 16, 2005 at 01:26:31PM -0600, Luke Palmer wrote:
> >>>Say I have a class method in FooClass, callable as FooClass.greet():
> >>>    method greet(Class $class: ) {
> >>>       say "Hello, FooClass!";
> >>>    }
> >>
> >>Aside from the fact that I don't think this is the right way to
> >>specify class methods...
> > 
> >What do you think is the right way to specify them?
> 
> I certainly can't speak for Luke, but I think the right way to specify 
> class methods is:
> 
>       method greet(FooClass ::class:) {
>           say "Hello, FooClass!";
>       }

In the interest of keeping the design documents up-to-date, A12 says:

    To declare an ordinary class method, such as a constructor, you say
    something like:

        method new (Class $class: [EMAIL PROTECTED]) { ... }

    Such a method may only be called with an invocant that "isa" C<Class>,
    that is, an object of type C<Class>, or derived from type C<Class>.


S12 says:

    Class methods are just methods that can take a class as their invocant.

Somehow I read these as though the original poster was correct --
i.e., one creates a class method for FooClass as either

    method greet(Class $class:) { say "Hello!"; }

or

    method greet(FooClass $class:) { say "Hello!"; }

Are the design documents out of date in this regard?  If so, can
someone provide a patch, if not, can someone confirm that the design
documents are correct?  (I just happened to be looking at class methods
this past week, which is why I was a little surprised by Luke and 
Damian's answers... :-)  

Pm

Reply via email to