重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“Ruby和Python的调用方法有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ruby和Python的调用方法有什么不同”吧!
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、重庆小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了万年免费建站欢迎大家使用!
Python 的 lambda / list comprehension 只能写一个表达式用于计算, 使得语言表达能力大大落后。 需要 contextual execution 的时候偶尔可以拿 with
语句凑合一下, 再就只能先 def
定义再拿去用。
而 Ruby 有 proc 支持, 应用范围更广泛, 还解决了 JavaScript 要忍受的 this
绑定问题。
结合前面提到的隐式 self
与 instance_exec
等物, 这几乎在一个 Static Scoping 的语言中实现了 Dynamic Scoping, 导致 Ruby 社区中随处可见 Internal DSL。
Ruby 的 case-when
语句可以不必写类似 C 的 break
, 默认就不会 fall-through。 而 Python 在某个 PEP 中明确地表示不支持。 当然你可以用奇怪的 hack 来伪造一个。
你可以说“ switch-case 往往应该重构成多态” 但是我希望保留自己选择的权利。 在 one-off 的代码里用用, 或者觉得重构反而收益不大时暂时用一下, 都没什么大问题。
Ruby 还有大把可以让你少打字的语言特性:
正则表达式字面量有人记得么, 这种属于不需要的时候无所谓, 需要的时候才会想起来的东西。
方法调用和定义可以免去参数两侧的括号, 在 CQS pattern 中, 无参数的 query 和所有 command 方法都可以受益。
%w
数组字面量在表意上完胜 "foo bar".split()
。
List comprehension 在表意上不比 Enumerable#map/select 明确, 同时使用 map 与 filter 时,代码的阅读顺序与执行顺序完全不匹配。
Ruby 很多语句可以当表达式来用, 方法定义隐式返回最后一个表达式值。 可以少写很多变量赋值或 return
。
rescue
可以直接在 def ... end
的代码块里使用, 不必写 begin
开头。
字符串内插。 Python 则有 %
与 str.format()
两种半吊子方案来凑合。 是谁说 Python 推崇只用一种最好的解决方案来着?
三元操作符, 对于 C 系语言用户来说都不陌生。 Python 偏要搞出 A if P else B
这种反直觉的东西来替代。 要求开发者多打很多字。 现实世界里经常有人用 P and A or B
这种有漏洞的方式替代之。
super
在 Ruby 中是关键字, 支持直接 pass through, 也支持显示地从继承链往上传递参数。
比如
python class Foo(namedtuple("Foo", "bar baz")): def __init__(self, *a, **kw): super(Foo, self).__init__(*a, **kw)
反观 Ruby 的写法… 前面这个代码块的最后一行只需写 super
即可。 不需要显示地写当前类的名字, 不需要传入 self
, 不需要记忆 self
和 class 两个参数的顺序, 不需要把方法的名字重复一遍, 也不需要把参数一个个传进去。 差距实在是太大。
你可以说现代编辑器 / IDE 都提供 snippet 之类的方式让你少打字, 但别忘了阅读代码时还是要被迫面对这些降低信噪比的 boilerplate。 而我们都知道维护代码时面对难读的代码是何等的残念。
到此,相信大家对“Ruby和Python的调用方法有什么不同”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!