Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Raku question: "Moose is Perl", but it sure ain't Raku.

by holli (Abbot)
on Feb 12, 2020 at 17:18 UTC ( [id://11112874]=note: print w/replies, xml ) Need Help??


in reply to Raku question: "Moose is Perl", but it sure ain't Raku.

The submethod BUILD is (indirectly) called by .bless. It is meant to set private and public attributes of a class and receives all names attributes passed into .bless. The default constructor .new defined in Mu is the method that invokes it. Given that public accessor methods are not available in BUILD, you must use private attribute notation instead.
C&P, straight from the docs
class C { has $.attr; submethod BUILD (:$attr = 42) { $!attr = $attr }; }; C.new.say; C.new( attr => 666 ); # 42 # 666
Edit:
The difference between BUILD and TWEAK (as mentioned by anonymous monk below) is, that the former happens while the object is constructed, whereas TWEAK happens after that, when the object has been fully constructed.


holli

You can lead your users to water, but alas, you cannot drown them.

Replies are listed 'Best First'.
Re^2: Raku question: "Moose is Perl", but it sure ain't Raku.
by Anonymous Monk on Feb 12, 2020 at 20:22 UTC
    class A { has $.a; method TWEAK(:$!a = "foo") { } } dd A.new; # A.new(a => "foo") dd A.new(a => "bar"); # A.new(a => "bar")

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11112874]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (7)
As of 2024-03-28 19:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found