7
sub foo : method { shift->bar(@_) }
ここで: method
とは何ですか?サブfoo:method {shift-> bar(@_)}に使用される構文は何ですか?
が、私はそれをこのように使ったことがない...
sub foo : method { shift->bar(@_) }
ここで: method
とは何ですか?サブfoo:method {shift-> bar(@_)}に使用される構文は何ですか?
が、私はそれをこのように使ったことがない...
: method
はfunction attribute説明です。このようにマークされたサブルーチンは、 "CORE ::%sとして解決されたあいまいな呼び出し"警告をトリガーしません。
ysthのコメント:
サブは組み込みと同じ名前を持ち、それが&なしではなくメソッド呼び出しとして呼び出されたときに警告が発生しました。 perlは代わりに組み込み関数を使用しますが、警告を出します。 :メソッドは、サブメソッドが決して非メソッドとして呼び出されることを意図していないことを明確に示しているため、警告をクイックにします。
更新
このコードは、単にfoo
が呼び出されるメソッドbar
呼び出します
sub foo : method { ## Mark function as method
shift->bar(@_) ## Pass all parameters to bar method of same object
}
詳細:
: method
- 参照サブルーチンがメソッドであることを示します。このようにマークされたサブルーチンは、 "CORE ::%sとして解決されたあいまいな呼び出し"警告をトリガーしません。shift
から$self
->bar(@_)
される、@_
から最初のパラメータを取得します - 他のすべてのパラメータと同じクラスメソッドbar
を呼び出すあなたはこれを読むことができます:
sub foo : method {
my ($self) = shift @_;
return $self->bar(@_);
}
sub foo:method {shift-> bar(@_)} '全体としての意味ですか? – asker
私は詳細を追加しました –
'method'属性なしでもまだ動作しているようですね。 – asker