我认为OOP的基础之一是,我们有对象,这是我们有兴趣处理的项目,然后我们向它们发送消息。
因此,看起来很自然,我有一组项目,并且需要将它们放入一个字符串中,因此可以这样做:
["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby
(Smalltalk的操作方式与此相同)。" | "
在某种程度上,它被认为是一个参数,是如何加入的一个象征。它可以是" "
也一样,如果游戏板是要简单。因此,联接元素" | "
并不是我们特别感兴趣的东西,也不是程序中的主要对象具有特别的重要性或意义。
如果Python使用
" | ".join(["x", "o", "o"])
确实感觉有点奇怪,几乎感觉就像我们在向论点传递消息,以告诉论点某些事情。也许Python更具程序性?告诉连接字符串为我们执行一些职责?
是否保存实现,以便我们不必join
为每个集合类定义一个?但是我们是否也可以为任何集合类编写一次(例如在Ruby中)不是真的吗?
module Enumerable
def my_join(joiner)
self.inject {|a,b| a.to_s + joiner + b.to_s}
end
end
(类似这样,调用to_s
每个项目,依靠to_s
每个类的做自己的事情,转换为字符串,然后将它们串联)。因此,我们不必为String,Hash或Set或我们拥有的任何集合类中的每一个实现。
还是Python出局不走OOP路线?它采用len("abc")
和type([])
替代"abc".len()
或者[].type()
甚至在Python3也似乎。Python是出于设计原因这样做吗?
Maybe Python is more procedural?
Python是一种过程语言,具有一些功能上的附加功能(“ Python获得了lambda,reduce(),filter()和map(),这是由Lisp黑客提供的,他们错过了它们并提交了工作补丁”),直到在版本中出现某处为止2.首次投入使用大约十五年了。