send_linux
发表于 2012-02-24 10:56
OwnWaterloo 发表于 2012-02-24 10:30 static/image/common/back.gif
擦,send_linux你不要这样……我这纯粹是来砸场子的好么……炮火我一个人吸引就够了……
发帖时真没注意到 ...
等着看你被砸.......:luya:
crazyhadoop
发表于 2012-02-24 10:57
这可是神书啊
dreamice
发表于 2012-02-24 10:59
捧场
OwnWaterloo
发表于 2012-02-24 11:01
回复 11# send_linux
要能从Ruby语言里学到一点东西,被口水淹死我也认了啊。
就怕是没这个机会:luya:
duanjigang
发表于 2012-02-24 11:12
本帖最后由 duanjigang 于 2012-02-24 11:15 编辑
这几天在把自己的shell脚本改造成ruby的,效率没比较,反正觉得开发起来很方便。。。3年前学过一段时间,后来停下来了
这几天刚下载英文版的这本书,正在读<<Metaprogramming_Ruby.pdf>>
我把英文版的放上来,感兴趣的下载看看喔
OwnWaterloo
发表于 2012-02-24 11:36
object_model/alphanumeric.rb
def to_alphanumeric(s)
s.gsub /[^\w\s]/, ''
end
- 1.2 Open Classes
整个章节可以吐槽的地方很多,这里只说一点:这功能又不是什么稀奇的事情,连许多被认为是静态语言并使用静态类型的语言都可以做到。
如果是C++:
1. 直接定义成全局
通常不会有什么问题,因为有重载。
2. 或者放到某个namespace然后using all。
当冲突真正发生时,还有机会使用带限定的访问。
根本不需要将to_alphanumeric移到string的定义内部,这与面向对象一点关系都没有。
"s.to_alphanumeric() 才是面向对象而 to_alphanumeric(s)不是" ← 这种想法是非常普遍又肤浅的。
因为这种肤浅认识太普遍了,C#还专门发明了一种叫做扩展方法的东西,还被当作了宝。
其实完全没有必要。
Ruby(以及许多同类语言)不敢像静态类型语言那样做是因为它们不能往全局里面塞太多东西。只能拿object当作namespace用。
这并不是什么优势,而是为了解决Ruby类语言自身的问题。
cjdao
发表于 2012-02-25 09:07
从写作风格上讲的话,这本书会让人想起《C专家编程》和《编码的奥秘》这一类的书籍.虽然是在讨论技术上的东西,却能以一种轻松的论调娓娓道来.
从内容上讲的话,呵呵,很遗憾,到目前为止我还只是个专一c程序员,对ruby可以说是一窍不通.对于元编程的概念也是一无所知的.所以也不敢妄下段论.
在编程语言的世界里,似乎也是一种百家争鸣的状态.编程语言本身或许并不具备优缺点,它们只是有自己不同是适用范围罢了.所以不管ruby有多少优越的特性,你总不会期望用它去实现一个操作系统吧;而c不管它有多少令人不如意的地方,在操作系统的世界里它却依然如鱼得水.因此每种编程语言编程思想的意义在于,它能让我们在这个不完美的世界上追求完美的过程中,多了一种探索的角度与方法.ruby/元编程,我相信也能为我们带来一种新的探索的角度与方法:))
to407
发表于 2012-02-26 10:40
回复 9# OwnWaterloo
我也觉得你是来吸引火力的。。。。匿
OwnWaterloo
发表于 2012-02-26 23:04
回复 18# to407
嗯,就是等人来拍死我的。但貌似没人丢砖啊……
琳琳的小狗
发表于 2012-02-27 16:55
OwnWaterloo 发表于 2012-02-24 10:01 static/image/common/back.gif
怎么在"Ghost Towns and Marketplaces/introduction"里面,就拿C++开刷了呢?怎么不去和Lisp比呢?
区 ...
这一节作者只是站在Ruby的角度上来看元编程,因为ruby是解释执行的,其元编程实现手段都是通过运行时修改对象模型来实现,因此他一开始就在这个上下文中,给出跟明确的定义(元编程是编写在运行时操纵语言构件的代码)是应该的,这个结论在后续章节中有所呼应。总不至于说,在一本讲Ruby技术内幕的书中,去讲C++或者其他语言的实现细节吧?
其实就我阅读这本书的过程来看,并没有感受到作者对其他语言,特别是静态语言的贬伐之意。作为一名实在的程序员,对某种语言有特别的嗜好完全可以理解,这就好比你言语之中透露的对C++的喜好。对于Lisp,书中一上来就讲了,Ruby是借鉴了Lisp以及Smalltalk的语法优势,属于后来之辈,怎么好意思说前辈的坏话?只不过对于同一事物的处理方式不同而已了,抬高点说,仅仅是世界观有所区别,正所谓“求同存异”嘛。
小弟才疏学浅,妄图回应下那三个问题:
1、别说的Ruby多流行似的好吗?
恩,Ruby在国内是非常不受待见,这点从相关的书籍出版物惨淡的销量上就能看出(希望这本元编程能带来点涟漪)。但是,不流行就代表很差劲么?反之,流行就代表高雅、牛逼?恐怕不见得。37things就是那么一个名不经传的小公司,使用如此垃圾的ruby语言开发了rails这么个另类的敏捷开发框架,不也在小众社会活的有滋有味么?如果Ruby真的这么垃圾,我想Uncle bob、Martin叔叔这些老家伙也不会亲言流露对其赞赏有加;另外Ruby社区的活力,恐怕也是有目共睹的,惯例优于配置、BDD实用化……无穷的创造力(可以参见rspec以及cucumber):
http://rspec.info/
http://cukes.info/
2. 说最友好不害臊吗?
说对程序员“友好”,这个标准是需要实践的,如果没有对ruby语言的实际使用感受,妄谈友好还是憎恶都不妥当,何不尝试一下呢?鄙人作为一名专职Ruby程序员,使用Ruby以及Rails已经有六年之久,深感这个社区的人文风格(如第一条的两个工具,给团队的开发人员实施BDD、ATDD带来了无穷的愉悦),我只想说,自从将项目从Java迁移到Ruby平台之后,加班少了,熬夜少了,一人顶三人,身体倍儿棒……
3. 只有一个世界并不是优势,能将多个世界融合、一致化才牛b
Ruby并没有排斥多元世界,相反,元编程在Ruby身上反而是通过一种简单的、高度一致的基础原则,也即”对象模型“来实现的,在Ruby中,真正的做到了”一切皆对象“,不相信?且看《Ruby元编程》的精彩剖析:)
页:
1
[2]
3
4
5
6
7
8
9
10
11