Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Smalltalk、Perl、Python和Ruby之间的集合和流类等价性_Python_Ruby_Perl_Programming Languages_Smalltalk - Fatal编程技术网

Smalltalk、Perl、Python和Ruby之间的集合和流类等价性

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中,哪些类是等效的或有效的语义替换?我发现了几个比较语法的语言比较页

我对Python、Perl和Ruby等语言几乎没有经验,但我从一段时间以来一直在使用Smalltalk进行开发。这里有一些非常基本的Smalltalk类,它们非常流行,并且是交叉Smalltalk实现:

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.