関数にa
という関数を渡して、b
を呼び出し、b
をPerlで呼び出すにはどうすればよいですか?関数オブジェクトを渡して呼び出す
答えて
ここには、あなたが求めていることを示す完全で実用的なスクリプトがあります。ここで
sub a { print "Hello World!\n"; }
sub b {
my $func = $_[0];
$func->();
}
b(\&a);
は説明です:あなたは\&a
を言うことによって機能a
への参照を取ります。その時点で関数参照があります。通常は関数はfunc()
と呼ばれ、関数参照は$func->()
となります。他の参照も同様に扱います。例えば、ここでは配列とハッシュリファレンスを扱うの例です:
sub f {
my ($aref, $href) = @_;
print "Here's an array reference: $aref->[0]\n"; # prints 5
print "Here's a hash ref: $href->{hello}\n"; # prints "world"
}
my @a = (5, 6, 7);
my %h = (hello=>"world", goodbye=>"girl");
f(\@a, \%h);
あなたはPerlで\&my_method
としてサブルーチンの参照にアクセスし、$myref->();
でそれらの参照を呼び出すことができます。試してみてください:
perl -e'sub a { print "foo in a"; }; sub b { shift->(); }; b(\&a);'
幸運を祈る!
もし私がfunctiを渡したらハッシュの一部として、それはこのように見えるでしょうか? $ args {function} - >(); – Kys
イーライCourtwrightの例にフォローアップ:あなたは別の関数に関数を渡すことはできません
b(sub { print "Hello World\n"; });
:あなたは一度だけ最初の関数を使用する場合は、あなたもこのように、無名関数でb
を呼び出すことができます直接。代わりに、参照を関数に渡します。関数を呼び出すには、->()
を使って逆参照する(CODE refとして)。
sub a { print @_ }
sub b {
my $f = shift; # assuming that $f is a function reference...
$f->(@_); # call it with the remaining arguments
}
b(\&a, "hello, world!"); # prints "hello, world!"
Perlは渡しの名前の意味を持っていませんが、あなたはハッシュを使用してそれらをエミュレートすることができます。関数を呼び出す方法は同じです。あなたはそれを逆参照します。
sub a { print @_ }
sub b {
my %arg = @_;
$arg{function}->(@{$arg{arguments}});
}
b(function => \&a, arguments => ["hello, world!"]);
ObPerl6:Perl 6は、パス名によるセマンティクスを持ちます。
- 1. 呼び出し可能なオブジェクトをメンバ関数に渡す
- 2. 関数の呼び出しにjsonオブジェクトを渡す
- 3. オブジェクトを関数に渡してもコンストラクタ呼び出しが発生しない
- 4. オブジェクトのパンダと呼び出し関数
- 5. flashオブジェクト:javascript関数を呼び出す
- 6. Rcpp:オブジェクトを引数として呼び出す関数
- 7. 別の関数呼び出しで関数を呼び出す
- 8. パラメータを渡して関数を呼び出す方法は?
- 9. 要素を渡して、onclickから関数を呼び出す
- 10. lincをクラス関数に渡して呼び出す方法は?
- 11. オブジェクトを関数として呼び出しますか?
- 12. asyncus ajaxを呼び出してjavascript関数を呼び出す
- 13. main()を呼び出して関数を呼び出す
- 14. 関数内の別の関数を呼び出してデータを渡す
- 15. 関数を呼び出してマップ関数からパラメータを渡す方法
- 16. jQueryオブジェクトの引数として別の関数に渡された関数を呼び出す
- 17. 名前をJsonオブジェクトに渡した関数を呼び出す方法は?
- 18. 関数呼び出しで変数を渡す方法
- 19. Objective cでオブジェクトをJavaScript関数呼び出しに渡す問題
- 20. インタフェースされたオブジェクトをPascal Script関数呼び出しに渡すには?
- 21. 関数呼び出しから関数呼び出し名を抽出する
- 22. 変数を使ってオブジェクト関数を呼び出す
- 23. コントローラの関数を呼び出し、値を渡します。
- 24. クリックして関数を呼び出す
- 25. Javascript:オブジェクト関数内のクリック関数からオブジェクト関数を呼び出す
- 26. 別の関数を使用してオブジェクトのベクトルで関数を呼び出す
- 27. 引数でデバウンス関数呼び出しを呼び出す
- 28. $ .tmpl関数の戻りオブジェクトでhtml()関数を呼び出す
- 29. オブジェクト内の関数から関数を呼び出す(オブジェクトリテラル)
- 30. 呼び出すフリー関数を渡しますか?
ハッシュの一部として関数を渡した場合、どうすればこのようになりますか? $ args {function} - >(); – Kys
配列とハッシュリファレンスの例を追加しました。 –
しかし、それはこのだった場合どのような:関数内で、その後 F(ファンクション=> \ &func); 、F、それはこの サブFだろう{ $ argsを{機能} - >(); } – Kys