Jun'uary
Jan'uary » 日志 » 红宝石的瑕疵
红宝石的瑕疵
Jan 发表于 2006-11-29 13:56:13
对于Ruby,俺一直抱有非常欣赏的态度。讨厌Perl,因为语法太ws,不过CPAN深的老夫欢心,语言这东西和IM一样,光靠优雅不行,得有人用才行,用的人越多,支持就越多;Python还好一点,语法过于优雅,我有点受不了,尤其是把tab这种纯粹文字风格得东西作为语法的一部分,晕啊。Ruby正好,不愠不火(ROR倒是火过头了)。Pure function式的语言看着有点类,也就暂且放下了,lisp那一大堆((((((((((())))))))))真是难受啊,还是Haskell漂亮,以后有空再看看Haskell。
所以每当看到有人无视Ruby俺都会非常伤心,尤其是88上一群小p孩啥也不懂,以Ruby创始人是日本人为由而认为Python啊Perl啊甚至PHP都要好的多的时候。老祖宗都知道师夷长技以治夷,你们咋就这么蠢涅,那种盲目自大比大清帝国也好不了多少。也许是因为浙大的学风太过于求是了,把学生都培养成了保守党。外面天翻地覆,里面云淡风清,这种风格也不错,可是有时候要人命。
好了,说了这么久不知道在扯什么,还没扯上主题。其实我是想说点关于Array的事情。
Ruby总共就两个集合类,一是Array,一是Hash。想想Java的Collection下面有多少类,就知道Ruby的轻盈鸟。Hash是无顺序的集合,所以Array必然要承担更多的责任 - Stack, Queue, DeQueue等等自然都要由它搞定,Array扛起了大半江山。
Array同学也的确不负众望,那叫一个灵活,到了Ruby手里,让它做Stack就是Stack,让它变成Queue就是Queue,别提多顺手了。Array的index操作实现精良,比如(红色是返回值):
a = [ 1, 3, 5, 7, 9 ]
[1, 3, 5, 7, 9]
a[1] = ’bat’
[1, "bat", 5, 7, 9]
a[3] = ’cat’
[1, "bat", "cat", 7, 9]
a[3] = [ 9, 8 ]
[1, "bat", "cat", [9, 8], 9]
a[6] = 99
[1, "bat", "cat", [9, 8], 9, nil, 99]
a = [ 1, 3, 5, 7, 9 ]
[1, 3, 5, 7, 9]
a[2, 2] = ’cat’
[1, 3, "cat", 9]
a[2, 0] = ’dog’
[1, 3, "dog", "cat", 9]
a[1, 1] = [ 9, 8, 7 ]
[1, 9, 8, 7, "dog", "cat", 9]
a[0..3] = []
["dog", "cat", 9]
a[5..6] = 99, 98
["dog", "cat", 9, nil, nil, 99, 98]
灵活吧?可是有点遗憾,俺觉得还不够完美:
a[2, -1] = 'Jan'
a[3..2] = [5, 6]
这两种写法都不行。虽然不会给你扔个异常,可是也不是你想要的结果,只是冷冰冰的返回一个nil。还有一点是, 2..4表示2,3,4,而2...4却表示2,3,直觉上,俺觉得,用...表示闭合区间更符合天理...
好吧,俺承认俺吹毛求疵了。
所以每当看到有人无视Ruby俺都会非常伤心,尤其是88上一群小p孩啥也不懂,以Ruby创始人是日本人为由而认为Python啊Perl啊甚至PHP都要好的多的时候。老祖宗都知道师夷长技以治夷,你们咋就这么蠢涅,那种盲目自大比大清帝国也好不了多少。也许是因为浙大的学风太过于求是了,把学生都培养成了保守党。外面天翻地覆,里面云淡风清,这种风格也不错,可是有时候要人命。
好了,说了这么久不知道在扯什么,还没扯上主题。其实我是想说点关于Array的事情。
Ruby总共就两个集合类,一是Array,一是Hash。想想Java的Collection下面有多少类,就知道Ruby的轻盈鸟。Hash是无顺序的集合,所以Array必然要承担更多的责任 - Stack, Queue, DeQueue等等自然都要由它搞定,Array扛起了大半江山。
Array同学也的确不负众望,那叫一个灵活,到了Ruby手里,让它做Stack就是Stack,让它变成Queue就是Queue,别提多顺手了。Array的index操作实现精良,比如(红色是返回值):
a = [ 1, 3, 5, 7, 9 ]
[1, 3, 5, 7, 9]
a[1] = ’bat’
[1, "bat", 5, 7, 9]
a[3] = ’cat’
[1, "bat", "cat", 7, 9]
a[3] = [ 9, 8 ]
[1, "bat", "cat", [9, 8], 9]
a[6] = 99
[1, "bat", "cat", [9, 8], 9, nil, 99]
a = [ 1, 3, 5, 7, 9 ]
[1, 3, 5, 7, 9]
a[2, 2] = ’cat’
[1, 3, "cat", 9]
a[2, 0] = ’dog’
[1, 3, "dog", "cat", 9]
a[1, 1] = [ 9, 8, 7 ]
[1, 9, 8, 7, "dog", "cat", 9]
a[0..3] = []
["dog", "cat", 9]
a[5..6] = 99, 98
["dog", "cat", 9, nil, nil, 99, 98]
灵活吧?可是有点遗憾,俺觉得还不够完美:
a[2, -1] = 'Jan'
a[3..2] = [5, 6]
这两种写法都不行。虽然不会给你扔个异常,可是也不是你想要的结果,只是冷冰冰的返回一个nil。还有一点是, 2..4表示2,3,4,而2...4却表示2,3,直觉上,俺觉得,用...表示闭合区间更符合天理...
好吧,俺承认俺吹毛求疵了。
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
最新评论
-
2006-11-29 15:40:22 http://li-yanzhe.spaces.live.com
ms挺好玩的样子,想起了Matlab
-
2006-11-29 15:45:57
受教
