免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5838 | 回复: 10
打印 上一主题 下一主题

perl6 hyper 操作符 原创 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-28 12:36 |只看该作者 |倒序浏览
前两天写的东西,看来大家响应还是很积极的。今天讲一讲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]]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2008-04-28 12:42 |只看该作者
把表情去一下。

论坛徽章:
0
3 [报告]
发表于 2008-04-28 16:38 |只看该作者
倒, 看来稍微复杂一点就无人问津了。

论坛徽章:
0
4 [报告]
发表于 2008-04-29 08:46 |只看该作者

回复 #3 xiaoyafeng 的帖子

我来顶你

论坛徽章:
0
5 [报告]
发表于 2008-05-02 21:12 |只看该作者
重新学语法让我有点苦闷

论坛徽章:
0
6 [报告]
发表于 2008-05-03 10:57 |只看该作者
perl6会不会比perl5慢?

论坛徽章:
0
7 [报告]
发表于 2008-05-03 11:21 |只看该作者
昨晚看了点haskell
完全不懂
跟Lisp啥的差不多

论坛徽章:
0
8 [报告]
发表于 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) >>++                            # 同上!


太帅了!

论坛徽章:
0
9 [报告]
发表于 2008-05-05 17:10 |只看该作者
哦,此帖不错,路过顶一下!~

论坛徽章:
0
10 [报告]
发表于 2008-05-06 22:12 |只看该作者
谢谢,回家侃侃哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP