Perl的“sort()”函数中的“$a”和“$b”究竟是什么?
我了解如何使用Perl的sort()函数来获取我想要的结果,这更多的是关于sort()的内部运算的问题.
“$a”和“$b”变量来自哪里?我阅读了关于排序的文件,似乎不清楚.什么是“$a”和“$b”,什么使他们特别? 例如: my @sorted_list = sort {$a cmp $b} @unsorted_list; “$a”和“$b”怎么样,为什么你不会得到“$a”或“$b”的“全局符号需要显式包名称”错误? 解决方法
$a和$b是免除全局变量;它们是免除的,因为Perl允许它们被使用(任何地方)而不被声明.它们由排序函数设置.在排序(严格模式)中使用任何其他未声明的全局将触发错误.
排序函数接受各种形式的输入,一个是代码块,这是您所指的形式. {$a cmp $b}是一个代码块,它被解析并作为“块代码”传递给排序函数,Perl检查参数进行排序,如果它接收到代码块,sort将设置$a和$b,如果它们作为代码块中的包全局变量存在,并且将分配给$a和$b的每对项目分配.所有你需要做的是指他们来控制排序算法.否则,使用内部算法(我认为是合并排序). http://perldoc.perl.org/functions/sort.html $a和$b不是词法,它们是包全局变量(或全局变量). 主要可以写: sort {$main::a cmp $main::b} @list; 或者在另一个包中,你可以写: package foo; sort {$foo::a cmp $foo::b} @list; 你不应该这样实际前缀我正在演示$a和$b实际上是您当前包中的全局变量,而不是一些魔术$a在排序函数中,尽管Perl知道允许您使用严格模式来定义它们. 您不能只使用任何变量(严格模式).尝试: sort {$A cmp $B} @list; Global symbol "$A" requires explicit package name at sort.pl 您不能在排序范围内使用词汇(我的$a). my $a; sort {$a cmp $b} @list; Can't use "my $a" in sort comparison at sort.pl line 13. Perl中的$a和$b是特殊的.他们是免除严格的模式,这是无关的排序,虽然排序是免除的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |