Smalltalk、Perl、Python和Ruby之间的集合和流类等价性
我对Python、Perl和Ruby等语言几乎没有经验,但我从一段时间以来一直在使用Smalltalk进行开发。这里有一些非常基本的Smalltalk类,它们非常流行,并且是交叉Smalltalk实现:Smalltalk、Perl、Python和Ruby之间的集合和流类等价性,python,ruby,perl,programming-languages,smalltalk,Python,Ruby,Perl,Programming Languages,Smalltalk,我对Python、Perl和Ruby等语言几乎没有经验,但我从一段时间以来一直在使用Smalltalk进行开发。这里有一些非常基本的Smalltalk类,它们非常流行,并且是交叉Smalltalk实现: FileStream ReadWriteStream Set Dictionary OrderedCollection SortedCollection Bag Interval Array 在Python、Perl和Ruby中,哪些类是等效的或有效的语义替换?我发现了几个比较语法的语言比较页
FileStream
ReadWriteStream
Set
Dictionary
OrderedCollection
SortedCollection
Bag
Interval
Array
在Python、Perl和Ruby中,哪些类是等效的或有效的语义替换?我发现了几个比较语法的语言比较页面,但是对于核心库和基础库的翻译似乎没有什么帮助
我还想知道Python、Perl或Ruby中是否有Smalltalk或viceversa中没有的基类或核心类?Perl
我将回答Perl,因为我精通Perl和Smalltalk
Smalltalk的字典非常接近Perl的哈希类型。字典对键使用对象等价性。Perl使用简单的字符串作为键,因此灵活性有些有限
Smalltalk的OrderedCollection非常接近Perl的数组类型
Smalltalk的文件流有点像Perl的文件句柄,因为它们表示到外部文件或设备的数据流
这就是问题所在,因为Perl只有散列、数组和文件句柄 蟒蛇
我应该注意到,Python2.7中有一个collections.Counter对象,相当于Bag。Ruby
heapq
是一个部分排序的集合。array.array
像smalltalk数组吗?另外,我认为collections.Counter
(Python 2.7)是一个包。Interval的slice
或islice
呢?Python的array.array很接近,但它只保存相同类型的对象。我不确定如何用切片来代替间歇。但仔细想想,xrange可能是一个更合适的等价物。但是,range正在变成Python 3.0中增强的xrange()。显然(从答案来看),您只需要了解一点Smalltalk和其他任何一种语言就可以有效地回答这个问题。即使“不太可能被[接受]”,发布一个答案也是有价值的。如果你认为它“太开放,无法直接回答”,你应该投票关闭。我不理解你的说法。你能澄清一下吗?这似乎是一个有着明确答案的特定问题。我正在回复一条现已删除的评论。使用Hash::Util::FieldHash函数,您可以获得哈希值,其中的键是指向对象和其他类型的无限制指针,这些类型在克隆后仍然存在,并与它们引用的对象一起获得GCed。添加最适合的CPAN模块的名称。
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)
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.