|
![]() | 作者: NetDemon [netdemon]
![]() |
登录 |
考考大家 sub func { $a <=> $b; } 你知道这个函数怎么用么?嗬嗬~~~ [此贴被 NetDemon(netdemon) 在 08月12日14时10分 编辑过] |
地主 发表时间: 08/12 14:06 |
![]() | 回复: Aoming [aoming] ![]() |
登录 |
-1,0,1 喝醉酒用来猜拳不错 哎~~思路打不开啊,老大指点 [此贴被 Aoming(aoming) 在 08月13日01时22分 编辑过] |
B1层 发表时间: 08/13 01:34 |
![]() | 回复: tommy_he [tommy_he] ![]() |
登录 |
不大明白,老大指点以下吧! 不过我还是希望学了 JAVA先,但是不知道哪里有下的!找了很久了! 谁知道啊!? |
B2层 发表时间: 08/13 04:55 |
![]() | 回复: allyesno [allyesno] ![]() |
登录 |
还没看到关于这个函数的章节。。。 |
B3层 发表时间: 08/13 10:38 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
改一下自定义函数的名字 sub by_number{ $a <=> $b; } 这样大概可以猜一下大的方向了 明天再把应用的代码发上 |
B4层 发表时间: 08/13 12:48 |
![]() | 回复: Garu [syshunter] ![]() |
登录 |
是不是交换两个值的? |
B5层 发表时间: 08/13 13:28 |
![]() | 回复: Aoming [aoming] ![]() |
登录 |
还是早点贴代码吧,光给一个by_number的提示脑细胞用光还是猜想不到,要有得经验才行,各个程序员编程习惯都不会全部相同的。 你用2个变量比较,函数返回3个可能的值-1,0,1 用来喝酒猜拳还可以,左手、空、右手 哎,不猜了,这个就象把一只手从人身上砍了,那也就不叫手没有其手的功能了 |
B6层 发表时间: 08/14 09:41 |
![]() | 回复: maomao520 [maomao520] ![]() |
登录 |
对啊,是不是 两个数值转换? |
B7层 发表时间: 08/16 14:46 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
open(FH,"$path_to_click_file"); @click = <FH>; close(FH); @sorted = sort by_number @click; for ($i=0;$i < 10; $i++){ push(@topten,$sorted[$i]); } foreach(@topten){ my($click,$url,$name)=split(/\|/,$_ ); print "< a href = \"$url\">$name</a> ($click)<br>\n"; } 参考20CN软件下载的《下载排行》 现在是否明白 |
B8层 发表时间: 08/16 18:52 |
![]() | 回复: tommy_he [tommy_he] ![]() |
登录 |
呵呵,大概明白了! |
B9层 发表时间: 08/16 19:22 |
![]() | 回复: Aoming [aoming] ![]() |
登录 |
其实代码简化一下就是这样: ----------------------------------- sub by_number { $a <=> $b; print "now \$a = $a\t \$b = $b\n"; } @click =("1","2","3","4","5","6"); @sorted = sort by_number @click; for ($i=0;$i < @sorted; $i++) { print "$sorted[$i] → "; } ------ 执行后的显示 ---------- now $a = 1 $b = 2 now $a = 3 $b = 4 now $a = 5 $b = 6 now $a = 2 $b = 4 now $a = 2 $b = 3 now $a = 4 $b = 6 now $a = 4 $b = 5 6 → 5 → 4 → 3 → 2 → 1 → ------------------------------- 感觉sub本身没有什么特别的,代码NB在那个sort sub list语句 引用: 字面上看“sort函数可以被一段任选的子程序指定”“子程序被指定2个结果(通过全局变量 $a 和 $b传递)并且当第一个小于或等于第二个时返回TRUE” 说实在的,虽然让perl将比较过程列出来了,可是参数栈操作的过程我一直是淅沥糊涂的,没好好琢磨过。。。 -o- 悔过中。。。。下线~~6了 |
B10层 发表时间: 08/18 06:25 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
很明显,Aoming你错的一塌糊涂了 你这个代码执行后的结果是这样的: ------------------------------ now $a = 2 $b = 1 now $a = 3 $b = 2 now $a = 4 $b = 3 now $a = 5 $b = 4 now $a = 6 $b = 5 1 → 2 → 3 → 4 → 5 → 6 → ------------------------------ 就是说:@sorted=@click 并原封不动的print出来 那我们现在改一下@click的内容: @click =("1","2","3","8","7","4","5","6"); 那么运行后的显示: -------------------------------- now $a = 3 $b = 8 now $a = 8 $b = 7 now $a = 2 $b = 8 now $a = 8 $b = 4 now $a = 1 $b = 8 now $a = 8 $b = 5 now $a = 8 $b = 6 now $a = 1 $b = 2 now $a = 3 $b = 1 now $a = 4 $b = 5 now $a = 7 $b = 4 now $a = 6 $b = 7 5 → 4 → 7 → 6 → 8 → 2 → 1 → 3 → ---------------------------------- 这很明显你自己都无法预料为什么是这样的结果 你这个代码,为了得到正确的结果: 代码要这么修改: @click =("1","2","3","8","7","4","5","6"); @sorted = sort @click; for ($i=0;$i < @sorted; $i++) { print "$sorted[$i] →"; } 这样的结果才是: 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 就是说,那个sub根本就不能用,用了就得不到正确的结果的。 为什么呢?嘎嘎~~继续想 |
B11层 发表时间: 08/18 09:28 |
![]() | 回复: Aoming [aoming] ![]() |
登录 |
日ing~~~中计了啊~~~~~ 回头再来,又一宿没睡了:) Mandrake9.1配了KDE3,感觉不错,哈哈 =================== 另外,老大,顺便提下子,你那个运行结果怎么搞出来的?我到linux下运行同样的脚本输出却不同?perl都是v5.8.0的来,搞不懂了,睡了睡了 now $a = 1 $b = 2 now $a = 3 $b = 4 now $a = 5 $b = 6 now $a = 2 $b = 4 now $a = 2 $b = 3 now $a = 4 $b = 6 now $a = 4 $b = 5 只有着上面的,程序最后一个语句无输出:( 眼皮极度打架中。。。先闪了 [此贴被 Aoming(aoming) 在 08月18日10时57分 编辑过] |
B12层 发表时间: 08/18 10:07 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
@sorted=sort{return (1) if ($a>$b); return (0) if ($a==$b); return (-1) if ($a<$b)} @click; 呵呵 |
B13层 发表时间: 08/19 11:45 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
刚刚看到这里,所以就~~~ 另外,bt是什么意思啊? |
B14层 发表时间: 08/19 11:49 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号