编程时多多思考吧,别光掌握perl的古怪用法而不理解其精髓!

编程时多多思考吧,别光掌握perl的古怪用法而不理解其精髓!

刚刚看了一则讨论闭包的精华贴子,感慨颇深:有的perler用了一辈子的grep都还不知道自己在用闭包,当然了,这似乎并不影响他为perl狡辩时说:perl对面向对象的支持很简单啦、我觉perl很容易理解啊云云,理解的都是错误的,浅薄之极,更可怕的是恐怕他还认为自己是正确的。

咱先看帖子:

QUOTE:
原帖由 shhgs 于 2007-4-2 07:25 发表
closure的本意,其实是给别人一个窗口,让人家能访问到你自己。

Perl的grep是closure最好的例子。(有的人用了一辈子的grep都不知道自己在用闭包)



QUOTE:
原帖由 flw 于 2007-4-2 09:40 发表

QUOTE:
closure的本意,其实是给别人一个窗口,让人家能访问到你自己。

Perl的grep是closure最好的例子。

我觉得你说的这种情形称为“回调函数”更加合适一些。



QUOTE:
原帖由 xiaoyafeng 于 2007-4-2 11:10 发表
8楼把callback和closure搞混了.

你们错了,shhgs才是正确的。

你们还是多看看perl以外的书吧,比如C#这样真正设计良好的语言,可以较容易的帮助你们建立正确的概念,“回调函数”不是“闭包”,是两嘛事,懂不?

编程时多思考吧,别光顾着掌握perl的古怪用法而不理解其精髓。咳,两个“高手”,grep是perl语言中最典型的应用了闭包概念的函数,用了这么长时间的perl,连grep使用闭包都 ...,真是够呛!只能说明你们是在学perl时就知道死记硬背,还反对别人融会贯通的思考。

要是这样下去的话,还不如改学简单的python了,说实话,我觉的python更适合某些铁杆perler, 希望你们不要认为这是对你们的侮辱。

搜索perl+闭包,这帖子已经上google了。你是不掐着点来的?
不知道楼主是在转述别人的观点,
还是在陈述自己的观点?
我看着有点儿莫名其妙。


QUOTE:
原帖由 orangetouch 于 2007-8-27 09:23 发表
搜索perl+闭包,这帖子已经上google了。你是不掐着点来的?

你管我为啥来CU了,正确的意见不愿意接受吗?现在,我澄清了那条帖子的概念性错误,不懂的人似乎应该感谢我才对?另外,那种帖子还“精华”?哈哈,不怕误导perl初学者吗?老实说,看到你们的领军人物的水准...,咳,奉劝perl高手们还是多看看perl以外的书吧,拓展一下自己的视野。

看看你的标题就足够了,内容写得不是很支持你的论点,
有点辞不达意,如果不能写简短,可以考虑写长一点。
perl 的闭包,是与perl垃圾回收机制密不可分的。但是闭包的应用,主要是在 smart callback 和 iterator 两个方面。

楼主真想理解 perl 的闭包, 请参阅 perlguts

grep {} @list;
map {} @list;
sort {} @list;

这些都用的closure,不知LZ有何疑问?
我学习perl是为了用perl来解决问题

而不是成为一个perl语言专家

如果面向过程的方法能解决我的问题,连OOP都懒得学
在SICP中说到,闭包有两种。
表达结构时,闭包指的是:“通过组成形成自封闭的组合体”--想象一下设计模式中的composite。。
表达过程时,闭包指的是:“将自由变量封包后形成的函数实体(听不懂别怪区区啊)”--在TCL和Lua中是以*upvar来实现的。

按这么说,grep中的block属于后者。。。。但是,,这个block也是被回调的函数啊,这样理解同样可以把grep用好啊。
有人规定closure就不能做回调了么??

我们又不是人人都要当语言律师,为什么非要让人人都搞清楚foo(a,b)实际上就是(aplly 'foo (quote 'a 'b) 'with-enviroment)呢???


继续讨论~~论事,别论人。
同意楼上2位的说法.

不知道楼主理解了多少精髓?

据说现在几个台湾朋友成了perl6的开发主力, 中国人还是第一次走到这么前沿的位置吧?
现在也正是用人的时候, 要不楼主也给我们大陆人争点光啊, 不要光在这里咋咋呼呼的. 自以为自己很牛.

PS.perl6具体的鹦鹉什么的我也搞不清楚什么关系. 我的理解是larry在定义perl语言, 然后别人在具体写程序实现这个东西, 就好像C++之父和g++, visual studio的关系一样.