29. アトリビュート
class Attrs {
has $!priv_var;
has $.pub_var is rw;
}
my $attr = Attrs.new;
$attr!priv_var = “alpha”; # NG
$attr.pub_var = “bravo”;
say $attr!priv_var; # NG
say $attr.pub_var; # bravo
32. 継承
class Person {
has $.name is rw;
}
class Speaker is Person {
method get_name {
return $.name;
}
}
my $speaker = Speaker.new;
$speaker.name = ‘risou’; # risou
my Person $p = Speaker.new;
35. オーバーライド
class Parent {
method print_generation {
say ‘first generation’;
}
}
class Child is Parent {
method print_generation {
say ‘second generation’;
}
}
Parent.print_generation; # first generation
Child.print_generation; # second generation
my Parent $p = Child.new;
$p.print_generation; # second generation
47. コンストラクタ
class OneAttr {
has $.attr;
multi method new ($attr) {
return self.bless(*, :attr);
}
method print_attr {
say $.attr;
}
}
my $oa = OneAttr.new;
$oa.print_attr; # Any()
48. コンストラクタ
• multi これだけ!
• multi をつけることでメソッドをオーバーロードできる
• (親クラスの)引数なしメソッドと
引数ありメソッドが同じクラスの中で同居できる