2011-08-25 5 views
7

Python、Perl、Rubyなどの言語に関する経験はほとんどありませんが、私はしばらくの間Smalltalkで開発しました。非常に人気とクロスのSmalltalk実装されているいくつかの非常に基本的なSmalltalkのクラスがあります。クラスは、Python、PerlやRubyで同等のまたは有効なセマンティック代替品になりSmalltalk、Perl、Python、Rubyのコレクションクラスとストリームクラス

FileStream 
ReadWriteStream 
Set 
Dictionary 
OrderedCollection 
SortedCollection 
Bag 
Interval 
Array 

?私は構文を比較するいくつかの言語比較ページを見つけましたが、コアライブラリとベースライブラリの翻訳にはほとんど役立たないようです。

また、Python、Perl、Rubyの中に、Smalltalkやviceversaにはない基底クラスやコアクラスがあるのだろうか?

+1

明らかにあなたが唯一の有効質問に答えるために、他の言語のone_少しのSmalltalkと_anyのいくつかを知っている必要があります(答えから)。そして、たとえ「受け入れることができない」場合でも、回答を投稿することは価値があります。それが「直接答えが出ないほど開いている」と思うなら、あなたは投票に投票したはずです。 – agf

+0

私はあなたの主張を理解していません。明確にすることはできますか?具体的かつ明確な回答がある特定の質問のようです。 – user869097

+0

私は今削除されたコメントに応答していました。 – agf

答えて

7

Perlの

私はPerlとSmalltalkの両方に堪能ですので、私は、Perlのためにお答えします。

スモールトークの辞書は、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)はBagだと思います。 Intervalの 'slice'や' islice'はどうでしょうか? – agf

+0

Pythonのarray.arrayはcloseですが、同じ型のオブジェクトしか保持しません。スライスがインターバルの代わりになるかどうか分からない。しかし、それについて考えると、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.