2017-02-04 13 views
1

からの呼び出し方法は、私は、メソッドのハッシュテーブルを持っています。私は何を持っていることは次のとおりです。perlのハッシュ

$makefileMacroSimplifiers{$macroName}->($self, $macroName.$ws1, \@parms); 

これが動作しているようですが、明示的にメソッドに$selfに渡すために私には少し奇妙に思えます。これを行うにはより良い方法がありますか、これは通常のコーディング慣行と考えられていますか? (私はウェブ上でこれを行うためのよりよい方法は見つけられませんでしたが、適切な検索基準を使用していない場合に備えて尋ねると思いました)。

+1

私は '$ self'を渡す必要があると思います。つまり、同じクラス内の別のメソッドからメソッドを呼び出す場合です。クラス自体の外部からメソッド( '$ obj-> method(...) 'という構文を使用して)を呼び出すと、通常は祝福されたオブジェクト参照があり、' $ self'を渡す必要はありません –

+0

呼び出しメソッドを表示します。 '$ macroName'と' $ ws1'はどこから来たのですか? – Borodin

+0

'$ macroName'と' $ ws1'は入力ファイルを解析した結果です。この場合、 '$ macroName'は' strip'、 '$ ws1'は' strip'の後の空白です。 (大丈夫、技術的にはメイクファイルでは、 'strip'はマクロではなく関数ですが、私はプログラム中のCコンパイラと同じ名前をつけようとしています)。 – user2766918

答えて

2

オブジェクトに対してコード参照を呼び出すこともできます。そうすれば左のものが渡されます。

my $coderef = sub { ... }; 
$self->$coderef(@args); 

ハッシュ要素を使用すると、このように動作しません。

$self->$dispatch{foo}(1, 2, 3); # BOOM 

これは構文エラーです。したがって、まずコード参照を取得する必要があります。 Borodin also explains this above in their comment

ここでは、HTTP :: Requestを任意のクラス/オブジェクトの例として使用しています。

+0

これはハッシュでは機能しないかもしれませんが。私はコンピュータの近くにいないので、私はすぐに確認することはできません。 – simbabque

+0

ありがとう、ありがとう。このようにするためにコードを更新しました。コメントに感謝します。 – user2766918

関連する問題