高階関数とクロージャ
ってのは相性が良い、というか関係がある。今月号のC Magazineの結城さんの連載に載っていた。(http://www.hyuki.com/al/)
いわれてみるとそんな気もするが、まだ実感がない。「そういえばそうかも」という感じか。*1
#!/usr/bin/perl -w # test009.pl # created:2005-02-26 18:08:58+09:00 # # 高階関数とクロージャ use strict; # highter_functionはサブルーチン(関数)を返す。 sub highter_function { my ($num) = @_; return sub { my ($mul) = @_; $num *= $mul; } # $numはクロージャ } my $set_mul = &highter_function(5); # かける数を5に設定 # サブルーチンのリファレンス print '$set_mul : ', $set_mul; # => $set_mul:CODE(0x274f40) print "\n"; # 3*5を計算 print '$set_mul->(3) : ', $set_mul->(3); # => $set_mul->(3):15 print "\n"; # 別の記法 # $\&highter_function(5)->(3) # {\&highter_function(5)}->(3) # はダメだった print '${\&highter_function(5)}->(3) : ', ${\&highter_function(5)}->(3); # => 15 # test009.pl ends here.
結果はこんな感じになった。
$set_mul : CODE(0x274f40) $set_mul->(3) : 15 ${\&highter_function(5)}->(3) : 15
*1:あんまり理解ができていないような気がかなりする。