7

perlモジュールで何度もこの行に出くわしましたが、これが正確に何を意味するのかわかりませんでした.

my ($self, %myInputs) = @_;

先に進むことができるように、ステートメントを説明してください。

4

3 に答える 3

8

これは、クラス メソッド functionの最初の行の 1 つだと思います。その行は、関数引数@_リストを解析し、常にオブジェクトへの参照である最初のパラメーターを抽出し、残りをハッシュに抽出します。これはもちろん、以下の Perl/Tk 関数のように、ハッシュ形式の引数で関数が呼び出されることを前提としています。$self %myInputs

$mw->Button(-text => "RIGHT", -command => sub { exit })
  ->pack(-side => 'right', -fill => 'both');
于 2012-12-17T07:00:22.273 に答える
6

私 ($self, %myInputs) = @_;

すべての関数が最初の引数を受け取るわけではありません$self。実際、慣例により、矢印演算子を使用して呼び出されたものだけが->;を行います。with で呼び出すと->、オブジェクトを参照する特別な引数が暗黙的に送信されます。perl のすべての関数とメソッドは、同じ方法で ( keyword を使用してsub) 宣言されます。関数がメソッドであるかどうかは、呼び出しによってのみ決定されます。

これmy ($foo, $bar) = ( $x, $y );は並列割り当てと呼ばれます。ここで起こっていることはそれだけです!

Perl で配列からハッシュを初期化できることを確認します。

my @foo = qw/ foo bar baz quz /;
my %hash = @foo;
print $hash{foo}; # outputs bar

hashに割り当てているため、暗黙的に送信されていないすべての入力が%myInputsハッシュに明示的に割り当てられます (その 1 つを にプルしているため)。しかし、注意してください、次のことを行うのはあまり意味がありませんよね?$self

my @foo = qw/ foo bar baz /;
my %hash = @foo;
print $hash{baz} # what is this set too??

同じ理由で、不均一な量の引数で関数を呼び出すこともあまり意味がありません! どちらも警告を生成します。

于 2012-12-17T07:15:48.763 に答える