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

BUILD and other submethods

Thread Next
From:
Ingo Blechschmidt
Date:
May 16, 2005 08:02
Subject:
BUILD and other submethods
Message ID:
loom.20050516T165805-749@post.gmane.org
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? 
 
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? 
 
 
  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?) 
 
 
--Ingo 
</lots_of_questions> 
 
--  
Linux, the choice of a GNU | self-reference, n. - See self-reference   
generation on a dual AMD   |  
Athlon!                    |  
 


Thread Next


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