Perl 板


LINE

※ 引述《abliou (愚者)》之铭言: : sub randpick { : my $max = shift; : my $need = shift; : return @{[sort{rand()>0.5}(0..$max)]}[1..$need]; : } : 或者连宣告变数都免了 : sub randpick { : return @{[sort{rand()>0.5}(0..$_[0])]}[1..$_[1]]; : } 来帮忙补充一些~ ^^ Perl 的 core module (就是有 perl 就会有, 不用再另外装的 module) 有一个叫作 List::Util 里面有个函数叫作 shuffle, 用来把一个 list 打乱 https://metacpan.org/pod/List::Util#shuffle 也蛮适合用在这边~~ use List::Util qw(shuffle); sub randpick { my($max, $need) = @_; (shuffle (0..$max-1))[0..$need-1]; } btw, 我觉得这边的用法还是宣告个变数比较好啦.. 因为小括号中括号大括号叠成一大团有点乱.. ^^| 那个 (...)[0..$need-1] 的部分, 这边也可以考虑 builtin 的 splice, 写成 use List::Util qw(shuffle); sub randpick { my($max, $need) = @_; splice [shuffle (0..$max-1)], 0, $need; } splice 的说明在这边~~ http://perldoc.perl.org/functions/splice.html PS. 我这边 randpick 的最後面没有写 return, 这在 Perl 是可以的, 呼叫 randpick() 的人会拿到这最後一个 statement 的结果. 我还不是很肯定这是不是好的风格.. 确定的是它会省一个 OP cycle 和无意义的「提前离开」的动作, 效能会比较好 (这是 Perl <= 5.18 的话, 而 Perl >= 5.20 以後会自动把 sub 里的最後一个 return 去掉) 嗯, 多写一个 return 字样, 我原本觉得它当然会比较清楚明确, 只是最近看到 Moz 设计了一套叫作 Rust 的语言 (听说想用来实作新一代的浏览器), 它的定位是效能大约在 C 或 C++ 的层级, 而严谨度比它们更好. 在 Rust 里面如果最後一个 statement 没有加分号, 那麽呼叫端就会拿到它的结果. 虽然也可以写成 return, 但是它甚至在官方文件里面建议不写 return 为佳... 使我不由得反省我习惯最後面明确写出 return, 是不是只是从 C 开始就这样写, 其後的 C++, Java, 或是 PHP, Javascript 也都一样, 想要 return 东西出去就一定要写 return, 其实只是个习惯, 也许不见得是好的习惯.. --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 112.121.80.249
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Perl/M.1415020525.A.F37.html
1F:推 abliou: splice不错!!!!! 11/03 22:21
(对自己的内容再加一点补充.. XD) ※ 编辑: CindyLinz (112.121.80.249), 11/03/2014 22:36:51
2F:推 abliou: 一开始写perl我也都不用return 接触C之後才养成习惯 11/03 22:44
3F:→ CindyLinz: 到底怎样比较好咧.. XD 11/03 22:50
4F:→ scwg: 当 functional language 写就不加 return 啦! 11/03 23:53
5F:→ CindyLinz: 好像不错的理由兼藉口.. XD 11/04 00:01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP