sort関数について
数値で昇順にしたい場合、比較のためのコードの断片を書いたけど、それに関して。
このコードブロックは、引数なのか?
引数なら普通カンマで区切るよねー、ということで書いてみた。http://ideone.com/ndKeH
my @nums = (31, 41, 59, 26, 53, 58, 9, 93); my @sorted = sort({ $a <=> $b }, @nums); print join(', ', @sorted), "\n";
カンマで区切ったらダメらしい。引数じゃないのかな...?
なんで$aと$bじゃなきゃダメなの?
勝手に変えてみた。http://ideone.com/fhIFB
my @nums = (31, 41, 59, 26, 53, 58, 9, 93); my @sorted = sort { $lhs <=> $rhs } @nums; print join(', ', @sorted), "\n";
じゃあ、既に$aと$bという変数が存在したら、どうなるんだろ。http://ideone.com/7Cgwc
my $a = 'foo'; my $b = 'bar'; my @nums = (31, 41, 59, 26, 53, 58, 9, 93); my @sorted = sort { $a <=> $b } @nums; print "\@sorted = (", join(', ', @sorted), "), \$a = $a, \$b = $b\n";
おこられた (´・ω・`)
てか一体 { $a <=> $b } は何者なの?
最近は関数をファーストクラスのオブジェクトとして扱える言語がたくさんある。そういう言語では、ソートのための関数が比較のための関数を受け取る(つまり高階関数として)ように実装されている事が多い。これは無名関数的なオブジェクトなのかな?
確かめる術は今のところ持たない...。