私はperlに関する本を読んでいますが、これまでのところ、次のコードに遭遇するまでOOPの概念を理解しています:
sub new {
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = {
color => "bay",
legs => 4,
owner => undef,
@_, # Override previous attributes
};
return bless $self, $class;
}
$ed = Horse->new; # A 4-legged bay horse
$stallion = Horse->new(color => "black"); # A 4-legged black horse
そのコードで私が見ているのは、new
サブルーチンで渡されたものはすべて、このコードでオブジェクト参照に変換されるパッケージ名と見なされるということです:
my $invocant = shift; #this one just get the name of the package which is the argument passed
return bless $self, $class;
- ハッシュの事前宣言 (空のハッシュではない) の使用は何ですか?
@_
また、リストの最後の部分で が提供されているのはなぜですか? 何のために?
次は、上記のコードに基づくこのステートメントです。
この Horse コンストラクターは、インスタンス メソッドとして使用される場合、その呼び出し元の既存の属性を無視します。インスタンス メソッドとして呼び出されるように設計された 2 番目のコンストラクタを作成できます。適切に設計されていれば、呼び出し元のオブジェクトの値を新しいオブジェクトのデフォルトとして使用できます。
その声明の90%は私には理解できません。
- インスタンスメソッドとは?またはオブジェクトメソッド?例を挙げていただけますか?
これがオブジェクトとインスタンスのメソッドであることは知っていmy $class = ref($invocant) || $invocant;
ますが、それらの違いや使い方がわかりません。
上記の「2番目のコンストラクター」は次のとおりです。
$steed = Horse->new(color => "dun");
$foal = $steed->clone(owner => "EquuGen Guild, Ltd.");
sub clone {
my $model = shift;
my $self = $model->new(%$model, @_);
return $self; # Previously blessed by ->new
}
繰り返しますが、それが何をするのかわかりません。だから誰でも私のためにこれを明確にすることができます.