- 论坛徽章:
- 0
|
前两天写的东西,看来大家响应还是很积极的。今天讲一讲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]] |
|