@hhui 并没有跳过 engienclass 和 module. 简单来说就是,Ruby 在 include 和 define method 的时候,已经对 klass 做了处理,已经串起来了。具体你可以看看这两个函数:
vm_define_method
rb_include_module
个人认为 ruby 是一门 geek 语言~ :)
谢谢分享你的学习经历~ :) 很同意你的“需要系统地学习 Ruby”这个观点。
Cool!
#15 楼 @gaicitadie 根据唱票记录统计每人的票数并按从多到少排序:
l = ['Jim', 'bush', 'Jim', 'Jim', 'Jim', 'bush', 'obama']
l.group_by{|i| i}.map{|k,v| [k,v.length] }
从楼主的例子直接翻译到 Ruby 1 中国习惯上先按金牌数排名,金牌数一样的按银牌数再排,如果银牌数再一样就按铜牌数排:
[['china',37,26,11], ['usa',30,22,50], ['russia',30,33,20]].sort_by{|x| [-x[1],-x[2],-x[3]]}
2 美国习惯上金牌银牌铜牌都是奖牌,所以按奖牌总数排序:
[['china',37,26,11], ['usa',30,22,50], ['russia',30,33,20]].sort_by{|x| -(x[1]+x[2]+x[3])}
3 统计金牌数超过 35 的国家:
[['china',37,26,11], ['usa',30,22,50], ['russia',30,33,20]].select{|x| x[1] >35}
4 统计奖牌总数超过 100 的国家:
[['china',37,26,11], ['usa',30,22,50], ['russia',30,33,20]].select{|x| x[1]+x[2]+x[3] > 100}
这两个语言都挺类似,我觉得 ruby 的 select 更直观。
另 楼主这个帖子想表达什么?没看出什么来。如果说只通过 sorted 就说明 python 是为数据而生的话,那 ruby 不也是吗。哈哈
先让自己变得优秀 :)
github pages
@fsword 这也不属于尾递归优化,内存一直增长,吃掉可用的 Ruby 进程空间,就会 out of memory 而 crash。
它的原理是利用了 fiber 都有一个独立的 stack(4KB),从而避开了 Ruby VM 的 stack,所以可以这样夸张的递归下去。话说回来,这样递归的进入 fiber,就会为每个 fiber 所自带的 stack 付出内存代价。递归级数太深的话,也很危险,毕竟太吃内存了。
@hooopo 我认为和 open files 无关。我机器的 open files 才 256。我认为跟你的机器是 32bit,进程空间小有关。因为 crash 是因为调用mprotect这个系统调用失败,ruby 抛了一个异常。应该是你的 Ruby 的可用进程空间基本没有了。
看了一下,它内部应该是打包了一个 wine, 这样的话,直接回去捣鼓 wine 得了。倒是省下钱了,呵呵、
#6 楼 @hhuai 我也找到一个 Mac 下的好东东 http://www.codeweavers.com/products/#cxmac 可以在 Mac 下直接安装 Source insight。刚找了公司的一个 Mac OS 10.6 的 Mac 试了一下,运行 SI 很 OK。
只是这个东东是要¥的,可以 14 天试用。不过确实挺不错的东东。试用可以的话,打算入手一个。
双飞燕就是 matz 写的那本。因为封面有两只鸟~ 故得此谐名。 中文: http://product.china-pub.com/129895 英文: http://product.china-pub.com/39849
中英文都有电子 f 版~ 网上挺多 :>
Matz 也是幽默细胞满身的人哪~
同意@hooopo 楼主需要系统的看一下 Ruby 的书,打打基础~,一遇到基础问题直接就发问的话,你会少了很多探究 ruby 的乐趣!
@hhuai Linux 下可以用 wine 跑 si http://linux.chinaunix.net/techdoc/net/2009/01/01/1056101.shtml
不知道 wine 在 mac os lion 下行不行?
现在单位是 windows,搞不了~ 等回家搞搞,估计也得折腾一阵 :< 不知道 ruby 社区有没有类似东东?@hhuai 直接用 Ruby 搞个吧 :)
我能看到你的头像~ 考拉