1

名前付きサブルーチンではなく、なぜ Perl の無名サブルーチンを使用するのでしょうか? 次のメリットについて考えるようになりました。

  • 匿名のサブルーチンを配列、ハッシュ、およびスカラーに格納します。

これはかなりクールなコンセプトですが、実用性はありますか? ある種のデータ構造に格納された匿名のサブ/サブ参照を使用しなければならない理由はありますか? それとも便利になる状況?

共有変数の処理などの特定のコンテキストで匿名サブが必要な理由は理解していますが (匿名サブが別のサブ内で宣言されている場合)、何かが欠けていない限り、何らかの関数を使用する意味がわかりません。参照。関数を完全に呼び出すだけで、コードがより見栄えがよく/整理されたように見えます。

私が間違っていると教えてください。これらのものを使用する正当な理由があれば幸いです。

前もって感謝します。

4

2 に答える 2

5

ディスパッチ テーブルは、何らかの値に基づいて実行するステップを動的に決定するのに役立ちます。

my %disp = (
   foo => sub { 'foo' },
   bar => sub { 'bar' },
);

my $cmd = get_cmd_somehow();
if (defined $disp{$cmd}) {
  $disp{$cmd}->(@args)
} else {
  die "I don't know how to handle $cmd"
}

( ->can($method) によるメソッドディスパッチは概念的に似ていますが、より柔軟で、詳細は隠されています。)

無名関数と字句閉包には他にも多くの用途があります。おそらく「高階関数」をより深く調べてください。(たとえば、map()/grep() について考えてみてください。)

于 2013-05-14T01:18:10.303 に答える