免费注册 查看新帖 |

Chinaunix

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

pppk之Recipe1.2(2) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-20 20:03 |只看该作者 |倒序浏览
本帖最后由 zhuyubei 于 2012-08-20 20:05 编辑

周末中断2天。一会继续写。咱们这样的屌丝,做事情不要太发狠,太热情。不然很容易就会放弃,会泄气。每天前进一点就好了。

先打个招呼,我后续的Recipe也许未必就会按照书里的顺序来。按照顺序写,一看后面还有这么多Recipe,大概会有点心理压力。所以就跳着做,但最终绝对不落下一个。或许按照兴趣和难易度,不拘一格但有计划的进行也是完成目标的一个重要的特性吧。

周末遇到一个IT大牛。该大牛中学时代就获得美国英特尔什么比赛的二等奖(大概是嵌入式的,他是全球第四)。有以他名字命名的小行星。他对我同事,也就是他的合作伙伴说,希望我同事能Enjoy做项目这个过程,而不是觉得是个负担。

这是什么样一种境界啊。无论我们牛不牛,无论别人牛不牛,希望大家都能Enjoy。

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
2 [报告]
发表于 2012-08-20 20:04 |只看该作者
贵在坚持...

论坛徽章:
0
3 [报告]
发表于 2012-08-20 20:22 |只看该作者
突然发现,刚打得东西,提交后没反应

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
4 [报告]
发表于 2012-08-20 20:26 |只看该作者
长文章
先在本地写,再贴
BTW
recipe是啥意思?
google给出的解释是食谱
有啥更贴切的翻译么?

论坛徽章:
0
5 [报告]
发表于 2012-08-20 20:30 |只看该作者
先说说Perl的列表的默认赋值法。这里Perl表现出诸多细节。



1. 如用||, ()数组被当作false, 但||的左操作数会被当作标量环境来使用,小心!
  1. my @aNums = ( 1 .. 10 );
  2. my @aSeconds = ( 101 .. 110 );

  3. # || puts its left oprand into scalar context.
  4. my @aDefaultList = @aNums || @aSeconds;

  5. # Oops, list only has a single element
  6. # which is the number of element in the rvalue list
  7. print "Oops, left operand of '||' is in a scalar context: [@aDefaultList]\n";

  8. # || puts its right oprand into list context.
  9. @aDefaultList = () || @aSeconds;
  10. print "'||' puts its right oprand into list context: \n[@aDefaultList]\n";
复制代码
2. 对于出现多个||的联用,也只有第一个||左边的那个操作数是标量环境。当然实质后面多个||,根本就没用到.
  1. # Multipls '||' test, || puts its right oprand into list context.
  2. @aDefaultList = () || ( 36 ) || @aSeconds;
  3. print "Multiple '||', it puts its right oprand into list context: \n[@aDefaultList]\n";
复制代码
3. 如果用or, 则左操作数不会被用在标量环境下, ()在or下,居然被认作是true! 小心!
  1. # Or can support left oprand in list context
  2. @aDefaultList = @aNums or @aSeconds;
  3. print "'Or' can support left operand's list context: [@aDefaultList]\n";

  4. # But it can regard null list ( ) as True!
  5. @aDefaultList = () or @aSeconds;
  6. print "Oops, 'Or' regards null list as true: [@aDefaultList]\n";
复制代码
4. 三元表达式,没有歧义
  1. # Three way testing, can have a choice, better than if not
  2. @aDefaultList = ( ) ? @aNums : @aSeconds;
  3. print "Using three-way testing: @aDefaultList\n";
复制代码
由于没有perl5.9, 不知道//操作符能不能用在列表环境里,请大家补充!

论坛徽章:
0
6 [报告]
发表于 2012-08-20 20:32 |只看该作者
下面说Python的。Python没有那么多的细节。用or,空数组[]被当作false
  1. # use or to assign a default list
  2. # null list will be regard as false
  3. nums   = range( 1, 11 )
  4. seconds = range( 101, 111 )

  5. defaultlist = nums or seconds
  6. print "Default list first list:",defaultlist

  7. # null list is regarded as false
  8. defaultlist = [ ] or seconds
  9. print "Default list second list:",defaultlist
复制代码

论坛徽章:
0
7 [报告]
发表于 2012-08-20 20:33 |只看该作者
回复 4# laputa73


    我觉得武侠点的翻译方式,翻做“招数”。绝非内容

论坛徽章:
0
8 [报告]
发表于 2012-08-20 20:40 |只看该作者
有时候觉得Perl的列表环境,标量环境确实挺搞的

  1. @a = 6
复制代码
这样的语句,其实是要一个标量,但是却还是一个数组。

所以我个人觉得Perl里面用引用的那一部分,是和Python类似的动态体系。$a = []; $a = {}; $a = \$b;
$a是动态类型的体系。

但是一旦你用了@, % 之类的东西,恰恰类型就不是动态的了。于是出现了把一个标量,很隐晦的变成了列表而Perl什么都不说。

或许有人会说,明明有文档说明了这个情况,自己不去看,这就是Perl之类的话。好吧。
在程序健康的时候,Perl的程序可能会比其他语言的更健康。但是当程序有问题的时候,Perl可能会比其他程序更难调试,更难控制。这就是我眼里的Perl。

论坛徽章:
0
9 [报告]
发表于 2012-08-20 21:11 |只看该作者
本帖最后由 kk861123 于 2012-08-20 21:13 编辑
zhuyubei 发表于 2012-08-20 20:30
先说说Perl的列表的默认赋值法。这里Perl表现出诸多细节。

感谢分享,很细节!
有个错误在第一个例子中
  1. 05.my @aDefaultList = @aNums || @aSeconds;
复制代码
||左侧为标量环境,@aNums的标量环境为array的个数,而不是array的最后一个值。

您忽略吧,是我看错了,被这样的例子误导了~
  1. my @aNums = ( 1 .. 10 );
  2. my @aNums = ( 'a' .. 'j' );
复制代码

论坛徽章:
0
10 [报告]
发表于 2012-08-20 21:20 |只看该作者
回复 9# kk861123


    谢谢您看得这么详细。在一开始我是写返回数组个数的。但是提交的时候居然没成功。后面一遍写得时候,赶了点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP