develooper Front page | perl.perl6.language | Postings from May 2005

Re: BUILD and other submethods

Thread Previous
From:
Larry Wall
Date:
May 16, 2005 08:48
Subject:
Re: BUILD and other submethods
Message ID:
20050516154829.GA2948@wall.org
On Mon, May 16, 2005 at 02:59:11PM +0000, Ingo Blechschmidt wrote:
: Hi, 
:  
:   class Foo { 
:     submethod BUILD() { 
:       say 42; 
:     } 
:   } 
:  
:   class Bar is Foo { 
:     submethod BUILD() { 
:       say 23; 
:     } 
:   } 
:  
:   my Bar $bar .= new; 
:  
: I suppose this will output: 
:   42 
:   23 
:  
: S12 says that "submethod[s] [are] called only when a method call is 
: dispatched directly to the current class", but the default implementation of 
: "new" (as given by Object), calls BUILDALL, which in turn calls all BUILDs, so 
: I think both BUILDs are executed. Are they? 

Yes.

: S12 says that "[s]ubmethods are for declaring infrastructural methods that 
: shouldn't be inherited by subclasses". I read this "shouldn't be inherited" as 
: that a submethod definition of the same name in a subclass does not 
: overwrite/substitute the definition of the parent class. Correct? 

Correct.
 
:   class A      { submethod blarb() { say 42 } } 
:   class B is A { submethod blarb() { say 23 } } 
:   B.new.blarb; 
:  
: Does this only output "23"? (I think so, as I don't call A::blarb explicitly. 
: If I wanted to call A's blarb, I'd have to say "B.new.A::blarb", correct?) 

Yes.

Larry

Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About