継承先の子クラスの呼び方が分からない
package Hoge; sub new { my $class = shift; bless {}, $class; } sub fuga { my $self = shift; my $class = ref $self; "$class\::Fuga"->new; } package Piyo; our @ISA = ('Hoge'); package Piyo::Fuga; sub new { bless {}, __PACKAGE__; } package main; use Data::Dumper; my $fuga = Piyo->new->fuga; print Dumper $fuga; #=> $VAR1 = bless( {}, 'Piyo::Fuga' );
こんな感じ。
つまり親クラスのHogeが架空の子クラスFugaを作るfuga()メソッドを定義している。
一方Rubyだと、こう?
class Hoge; end class Piyo < Hoge def fuga Fuga.new end class Fuga end end p Piyo.new.fuga #=> #<Piyo::Fuga:0x007fda54103a70>
架空の子クラスではなく、実在のPiyo::Fugaを作るfuga()がPiyoクラス内に定義が移ってしまっている。。。
どうすればいいんだろう。
(こういう時、ただの文字列から簡単にクラス扱いできると楽チンだと思う)