如何在Perl中將函數a
傳遞給函數b
並使b
調用a
?傳遞函數對象並調用它
24
A
回答
37
下面是一個完整的工作腳本,演示您所要求的內容。
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);
4
您可以訪問子程序引用和Perl一樣\&my_method
,並呼籲與$myref->();
這些引用。試試這個:
perl -e'sub a { print "foo in a"; }; sub b { shift->(); }; b(\&a);'
祝你好運!
+0
如果我通過函數作爲哈希的一部分,那麼它會是這樣嗎?的$ args {函數} - >(); – Kys 2009-08-05 18:23:59
2
繼達禮Courtwright的例子:如果你只使用第一個函數一次,你也可以打電話b
與匿名函數,像這樣:
b(sub { print "Hello World\n"; });
5
你不能傳遞一個函數到另一個函數直。相反,您將一個參考傳遞給一個函數。要調用該函數,請使用->()
對其進行解引用(作爲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. 調用函數,並將它傳遞一個JSON對象
- 2. 我怎樣才能調用JavaScript函數,並傳遞到它行的對象?
- 3. javascript + asp.net - 從c#調用javascript函數並傳遞一個對象
- 4. 將對象傳遞給函數調用中的函數
- 5. 傳遞參數的函數,並通過調用它的「&」
- 6. 調用函數,並傳遞給它的結構
- 7. 如何函數對象傳遞給函數回調C++
- 8. 使用JavaScript調用函數時,以及何時傳遞對象?
- 9. 什麼是函數中更快的傳遞對象或靜態調用它
- 10. 將數組轉換爲對象並調用它的函數
- 11. 從AS3中傳遞對象調用JS函數
- 12. 如何將接口對象傳遞給Pascal Script函數調用?
- 13. 檢索從調用函數傳遞的對象的ID
- 14. 傳遞一個可調用對象的成員函數
- 15. 將對象數組傳遞給函數
- 16. Mockito:將模擬對象作爲參數傳遞給函數(調用函數時)
- 17. 如何通過另一種方法傳遞方法而不調用它,並將變量對象傳遞給它?
- 18. 調整函數大小並傳遞值
- 19. 傳遞類對象作爲參數傳遞給函數
- 20. Java - 傳遞類作爲參數並使用它來調用函數
- 21. Vue.js傳遞函數作爲道具並讓孩子用數據調用它
- 22. 將對象傳遞給函數不會導致構造函數調用
- 23. 傳遞一個對象參數爲const並讀取它
- 24. 傳遞新對象到函數C++
- 25. 將RtMidi對象傳遞給函數(C++)
- 26. javascript raphael對象函數傳遞
- 27. 傳遞剃刀對象的JavaScript函數
- 28. 動態傳遞給函數對象STL
- 29. 傳遞給JavaScript函數的HashMap對象
- 30. 抵消對象傳遞給函數
如果我將該函數作爲散列的一部分傳遞,那麼它會是這樣嗎? $ args {function} - >(); – Kys 2009-08-05 18:15:13
我已經添加了數組和散列引用的示例。但是,如果 – 2009-08-05 18:26:55
它是這樣的: F(功能=> \ &func); 然後在函數f,那會是這個 副反饋{ 的$ args {功能} - >(); } – Kys 2009-08-05 18:44:12