深入探讨Ruby与Python语法比较

开发 开发工具
我们希望大家可以通过对Ruby与Python语法比较,能够充分的掌握Ruby语法的应用,更深一步的了解到Ruby语法的含义。

编程语言种类繁多,但是每种语言都有自己的特点,又和其他语言有共通性。比如PHP语言就和C语言相似。我们今天介绍的就是Ruby与Python语法比较。#t#

其实Ruby和Python非常接近,比大多数别的语言要接近的多,所以喜欢用啥就用啥(大实话,虽然也是废话)。语法上的差别虽然有那么一点,大部分是syntax sugar,我斗胆稍微列几个(python我也忘得差不多了,不对的大家尽管来鞭尸吧),但是主要差异还是设计思想上的:灵活vs明确. 我不认为两者在生产力上会有什么差别,如果你熟悉的话。*注意,仅限语言本身的比较。

Ruby与Python语法比较的列表

1. Ruby的case可以匹配很多东西:范围/数组,对象,正则表达,python没有case/switch而使用if/else比较死板点

2. python的缩进很漂亮,虽然有时会造成些许麻烦。Ruby的end蛮难看的,所以大家都被逼当one liner(玩笑)

3. 感觉上Ruby比python更OO,当然这也可能是因为python不提倡用那些改变对象内部构造的‘伎俩’造成的错觉

4. python有list comprehension, Ruby没有:(

5. python有真正的keyword argument, Ruby用hash模拟,当然实际用起来没什么差别

6. python的self很讨厌,Ruby没有那种繁琐的东西

7. reflection,Ruby内置了很多方法,比如object.methods,而python把这些信息存在特殊的字典里。差不多

8. Ruby的block功能很强,python的lambda只能返回单一值

9. Ruby与Python语法比较下,Ruby的open class已经声明远播,可以玩出2.days.ago这样的花样,python好像没法直接修改内置类也反对这么做。

10. python需要用@classmethod修饰声明类方法,Ruby是内建

11. Ruby有单子方法,也就对对象单独定制,python不知道有没有类似概念

12. Ruby有method_missing机制,python可以使用__getattr__截获未定义方法(from qiezi)

13. Ruby使用单继承+mixin,python使用多重继承,不过python也有mixin

14. Ruby有attr_*系列语法helper,省却自己写一堆setter/getter, python的property方法还是得自己写setter/getter

15. Ruby和python都使用duck typing,不过python也有一套显式的interface机制(从zope3并入内核了么?)

16. Ruby的函数调用括号是可省的,稍微少敲几下键盘。python默认没括号也不带参数的话返回函数本身的一个引用。

17. 我不清楚python的meta programming能到什么程度,只好等大牛来说说了。只是觉得pythoner不常用那个,也许觉得会把程序逻辑搞得晦涩不明。

18. Ruby从perl继承了一部分难看的东西,比如很多预定义的$x常量

19. Ruby内建正则表达,方便一点

20. Ruby的yield是用来call block的。而python的yield是用来给generator输入输出值的。

21. python的库给我感觉命名规范有点不统一,有些方法用snake_case有些则用CamelCase,也许是库太多了遗留下的历史问题

22. python的三引号很漂亮,Ruby的<<-XX...XX太难看了,也可以用%q{...}包裹多行文字(from qiezi)

23. Ruby的类库设计中喜欢给方法添加别名,方便记忆。

另: Ruby官方网站也提供了一些基本的Ruby与Python语法比较。

责任编辑:曹凯 来源: 百度博客
相关推荐

2009-12-14 14:40:10

Ruby全局域变量

2009-12-16 16:44:31

Ruby on Rai

2010-03-05 13:44:00

Python序列

2009-12-23 16:13:00

WPF Attache

2010-07-21 09:38:15

PHP缓存技术

2010-11-22 14:18:32

MySQL锁机制

2021-05-17 05:36:02

CSS 文字动画技巧

2009-11-20 17:17:08

Oracle函数索引

2009-08-14 13:45:03

Ruby和Python

2011-02-25 09:23:00

Java类加载器

2015-09-02 08:57:56

JavaHashMap工作原理

2009-08-27 11:27:58

foreach语句C# foreach语

2010-03-31 14:58:03

云计算

2023-01-12 17:18:06

数据库多云

2024-01-24 08:31:13

extends​接口规范

2009-10-16 09:17:39

屏蔽布线系统

2009-12-07 13:55:58

PHP array_m

2009-12-07 16:07:03

PHP类的继承

2017-01-03 17:57:46

Android异步精髓Handler

2009-11-12 13:56:54

点赞
收藏

51CTO技术栈公众号