2011-08-25 7 views
7

Mam niewiele doświadczenia z językami takimi jak Python, Perl i Ruby, ale od pewnego czasu rozwinąłem w Smalltalk. Istnieją pewne bardzo podstawowe klasy Smalltalk, które są bardzo popularne i cross-Smalltalk realizacja:Równoważności kolekcji i potoków klas między Smalltalk, Perl, Python i Ruby

FileStream 
ReadWriteStream 
Set 
Dictionary 
OrderedCollection 
SortedCollection 
Bag 
Interval 
Array 

Które klasy byłyby równoważne lub ważne semantyczne zamienniki w Python, Perl i Ruby? Znalazłem kilka stron porównywania języków porównujących składnię, jednak wydaje się, że pomoc w tłumaczeniu bibliotek podstawowych i bazowych jest niewielka.

Zastanawiam się również, czy istnieje klasa podstawowa lub rdzeniowa w Pythonie, Perlu lub Ruby, która nie występuje w Smalltalk lub viceversa?

+1

Oczywiście (z odpowiedziami) Musisz wiedzieć tylko trochę Smalltalk i niektóre _any one_ innych językach, aby odpowiedzieć na pytanie, z pożytkiem. I warto zamieszczać odpowiedzi, nawet jeśli "nie jest to możliwe". Jeśli uważasz, że jest "zbyt otwarty, aby odpowiedzieć bezpośrednio", powinieneś głosować, aby zamknąć. – agf

+0

Nie rozumiem twoich roszczeń. Możesz wyjaśnić? Wydaje się, że jest to konkretne pytanie o konkretnych i jasnych odpowiedziach. – user869097

+0

Odpowiedziałem na komentarz, który został usunięty. – agf

Odpowiedz

7

Perl

będę odpowiadać za Perl, ponieważ jestem biegły zarówno w Perlu i Smalltalk.

Słownik Smalltalk jest dość zbliżony do hashu Perla. Słownik używa ekwiwalencji obiektów dla kluczy. Perl używa prostych ciągów dla kluczy, więc elastyczność jest nieco ograniczona.

Smalltalk's OrderedCollection jest dość zbliżony do typu tablicy Perla.

Plik FileStream Smalltalk przypomina nieco uchwyty plików Perla, w tym sensie, że reprezentują strumień danych do zewnętrznego pliku lub urządzenia.

I to wszystko, ponieważ Perl ma tylko skróty i tablice oraz uchwyty plików. :)

+0

Korzystanie z funkcji Hash :: Util :: FieldHash można uzyskać skróty z kluczami, które są zindentowanymi wskaźnikami do obiektów i innych typów, które przetrwają CLONEing i pobierają GCed wraz z obiektem, do którego się odnoszą. – MkV

+0

Dodaj nazwy modułów CPAN, które najlepiej pasują. – 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) 

Należy zauważyć, że istnieje obiekt collections.Counter dla Pythona 2.7, które jest równoważne Bag.

+0

'heapq' jest częściowo posortowaną kolekcją. Czy 'array.array' jest tablicą typu smalltalk? Ponadto uważam, że 'collections.Counter' (Python 2.7) to torba. A co z 'slice' lub' islice' dla Interval? – agf

+0

Tablica Pythona jest bliska, ale zawiera tylko obiekty tego samego typu. Nie jestem pewien, w jaki sposób plaster może zastąpić Odstęp. Myśląc o tym jednak, xrange może być bardziej trafnym odpowiednikiem. Ale zakres zmienia się w ulepszone xrange() w Pythonie 3.0. – David

4

Ruby

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.