Chinaunix
标题:
perl6 hyper 操作符 原创
[打印本页]
作者:
xiaoyafeng
时间:
2008-04-28 12:36
标题:
perl6 hyper 操作符 原创
前两天写的东西,看来大家响应还是很积极的。今天讲一讲perl6 元操作符的一个:hyper 操作符。
什么是hyper操作符呢? 官方解释:所有>>, <<(包括uinicode),用来对一个list中的所有元素做某一操作,并返回一个list.
唔,类似 perl5 中的map,不过更强大。现在我们可以来看看hyper操作符的强大功能:
(1,2,3,4)>> +<<(1, 2, 3, 4) #(2, 4, 6, 8)
(1, 2, 3, 4) >>+ >>1 #(2, 3, 4, 5) 注意hyper操作符的方向!!
(1, 2, 3, 4) >>++ # 同上!
@PP >>+= # @PP所有元素自增1
如果hyper操作符两边有一个属于scalar(在perl6 中也叫item),perl6会自动强制转换,但是前提是hyper操作符的方向应指向该元素。(见例2)
在 perl6里面, 方法可以近似看做“后操作符”. (注:perl6的操作符分为 prefix op, infix op, 和 postfix op。有兴趣的人可以查看syn,我这里就不扯远了),所以当然可以这样使用:
(1, 2, 3, 4). >>++ #同上
(1, 2, 3, 4) >> .++ #同上
稍微巧妙一点:
@objects >> .run #顺序执行run
("a", "bb", "ccc") >> .char # (1, 2, 3)
hash也是一种list,所以也可以使用hyper操作符。不过是以key作为项的,而且hyper符的方向起到了类似sql语句中左包含,右包含的作用。见下例:
%a >>+<< %b #既包含%a 又 包含%b的元素才相加
%a <<+>>%b # 全包含
%a >>+>>%b # 包含%b
%a <<+<<%b # 包含%a
好了,上面展示了一些hyper操作符的基本应用。大家可以多试试,或者查看文档,好好领会perl6中新的操作符。
p.s.
回答一些上次大家提的问题:
1. 因为那句著名的圣诞节宣言, perl6开发人员正在努力赶工。 ;)
2. pugs 看上去差不多停滞了, rakudo倒是很积极, 0.70下个月初发布。
3. parrot 基本的io也差不多了, 我们至少可以用perl6 来写个简单的cat:
my $fh = open("README", :r);
for =$fh {
say " $_";
}
$fh.close();
[[i] 本帖最后由 xiaoyafeng 于 2008-4-28 12:54 编辑 [/i]]
作者:
flw
时间:
2008-04-28 12:42
把表情去一下。
作者:
xiaoyafeng
时间:
2008-04-28 16:38
倒, 看来稍微复杂一点就无人问津了。
作者:
YGC
时间:
2008-04-29 08:46
标题:
回复 #3 xiaoyafeng 的帖子
我来顶你
作者:
redspider
时间:
2008-05-02 21:12
重新学语法让我有点苦闷
作者:
doiob
时间:
2008-05-03 10:57
perl6会不会比perl5慢?
作者:
churchmice
时间:
2008-05-03 11:21
昨晚看了点haskell
完全不懂
跟Lisp啥的差不多
作者:
albertlee
时间:
2008-05-04 17:53
(1,2,3,4)>> +<<(1, 2, 3, 4) #(2, 4, 6,
(1, 2, 3, 4) >>+ >>1 #(2, 3, 4, 5) 注意hyper操作符的方向!!
(1, 2, 3, 4) >>++ # 同上!
太帅了!
作者:
不死草
时间:
2008-05-05 17:10
哦,此帖不错,路过顶一下!~
作者:
robusts
时间:
2008-05-06 22:12
谢谢,回家侃侃哈
作者:
Monox
时间:
2008-05-14 22:46
新来第一天,顶一下,算报个到,新的语法对处理数学问题方便了些呀。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2