免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux

《ruby元编程》有奖试读中!(获奖名单已公布) [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
发表于 2012-02-24 10:56 |显示全部楼层
OwnWaterloo 发表于 2012-02-24 10:30
擦,send_linux你不要这样……我这纯粹是来砸场子的好么……炮火我一个人吸引就够了……
发帖时真没注意到 ...


等着看你被砸.......

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
发表于 2012-02-24 10:57 |显示全部楼层
这可是神书啊

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
发表于 2012-02-24 10:59 |显示全部楼层
捧场

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2012-02-24 11:01 |显示全部楼层
回复 11# send_linux

要能从Ruby语言里学到一点东西,被口水淹死我也认了啊。
就怕是没这个机会

论坛徽章:
0
发表于 2012-02-24 11:12 |显示全部楼层
本帖最后由 duanjigang 于 2012-02-24 11:15 编辑

这几天在把自己的shell脚本改造成ruby的,效率没比较,反正觉得开发起来很方便。。。3年前学过一段时间,后来停下来了
这几天刚下载英文版的这本书,正在读<<Metaprogramming_Ruby.pdf>>
我把英文版的放上来,感兴趣的下载看看喔

Metaprogramming_Ruby.part2.rar (1.79 MB, 下载次数: 111)

评分

参与人数 1可用积分 +6 收起 理由
send_linux + 6 感谢分享!

查看全部评分

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 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类语言自身的问题。

论坛徽章:
1
白羊座
日期:2013-08-22 17:30:33
发表于 2012-02-25 09:07 |显示全部楼层
从写作风格上讲的话,这本书会让人想起《C专家编程》和《编码的奥秘》这一类的书籍.虽然是在讨论技术上的东西,却能以一种轻松的论调娓娓道来.

从内容上讲的话,呵呵,很遗憾,到目前为止我还只是个专一c程序员,对ruby可以说是一窍不通.对于元编程的概念也是一无所知的.所以也不敢妄下段论.

在编程语言的世界里,似乎也是一种百家争鸣的状态.编程语言本身或许并不具备优缺点,它们只是有自己不同是适用范围罢了.所以不管ruby有多少优越的特性,你总不会期望用它去实现一个操作系统吧;而c不管它有多少令人不如意的地方,在操作系统的世界里它却依然如鱼得水.因此每种编程语言编程思想的意义在于,它能让我们在这个不完美的世界上追求完美的过程中,多了一种探索的角度与方法.ruby/元编程,我相信也能为我们带来一种新的探索的角度与方法)

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-02-26 10:40 |显示全部楼层
回复 9# OwnWaterloo


    我也觉得你是来吸引火力的。。。。匿

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2012-02-26 23:04 |显示全部楼层
回复 18# to407

嗯,就是等人来拍死我的。但貌似没人丢砖啊……

论坛徽章:
0
发表于 2012-02-27 16:55 |显示全部楼层
OwnWaterloo 发表于 2012-02-24 10:01
怎么在"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元编程》的精彩剖析:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP