2011-08-25 48 views
7

我很少有Python,Perl和Ruby等语言的经验,但是我已经从Smalltalk开发了一段时间。有一些非常基本的Smalltalk类,这是非常受欢迎的,跨Smalltalk的实现:Smalltalk,Perl,Python和Ruby之间的集合和流类的等价性

FileStream 
ReadWriteStream 
Set 
Dictionary 
OrderedCollection 
SortedCollection 
Bag 
Interval 
Array 

哪些类是在Python,Perl和Ruby的等效或有效语义替代?我发现了几个比较语法的语言比较页面,但是在翻译核心库和基础库时似乎没有什么帮助。

我也想知道在Python,Perl或Ruby中是否存在基类或核心类,而Smalltalk中不存在或反之亦然?

+1

明显(从答案),你只需要知道一点Smalltalk和一些_any的one_其他语言来有效地回答这个问题。即使“不太可能被接受”,发布答案也是有价值的。“如果你认为这是“太直接回答”,你应该投票结束。 – agf

+0

我不明白你的要求。你能澄清吗?这似乎是一个具体和明确答案的具体问题。 – user869097

+0

我回应了一条现在被删除的评论。 – agf

回答

7

Perl

我会回答Perl的,因为我在Perl和Smalltalk上都很流利。

Smalltalk的字典非常接近Perl的散列类型。一个字典使用对象等价的密钥。 Perl为键使用简单的字符串,所以灵活性有限。

Smalltalk的OrderedCollection非常接近Perl的数组类型。

Smalltalk的FileStream有点像Perl的文件句柄,它们表示一个数据流到外部文件或设备。

就是这样,因为Perl只有哈希和数组以及文件句柄。 :)

+0

使用Hash :: Util :: FieldHash函数,您可以获得带有密钥的散列值,这些密钥是指向对象的其他类型的指针,以及CLONEing中存活的其他类型的指针,以及与引用的对象一起获取GCed。 – MkV

+0

添加最适合的CPAN模块的名称。 – daxim

2

的Python

FileStream -> file 
ReadWriteStream -> file 
Set -> set 
Dictionary -> dict 
OrderedCollection -> list 
SortedCollection -> no equivalent object (must call sort on a list) 
Bag -> no equivalent object (must implement using dict) 
Interval -> no equivalent object (but a range() function exists for making lists) 
Array -> no equivalent (tuple is read-only, fixed length. list is variable length) 

我要指出,有就是Python 2.7 collections.Counter对象,它是相当于袋。

+0

'heapq'是一个部分排序的集合。 'array.array'就像一个smalltalk数组?另外,我认为'collections.Counter'(Python 2.7)是一个包。 Interval的'slice'或'islice'如何? – agf

+0

Python的array.array是关闭的,但它只保存相同类型的对象。我不确定切片如何替代Interval。想想看,虽然,xrange可能更加贴切。但是,范围正在变成Python 3.0中增强的xrange()。 – David

4

红宝石

FileStream   -> File 
ReadWriteStream -> IO (or other things that duck type like it) 
Set    -> require 'set', then use the Set class 
Dictionary   -> Hash 
OrderedCollection -> Array 
SortedCollection  nothing similar 
Bag     nothing similar 
Interval   -> Range 
Array     Ruby has no fixed-length collection class.