2011-08-25 6 views
7

Ho poca esperienza con linguaggi come Python, Perl e Ruby, ma da Small Time ho sviluppato in Smalltalk. Ci sono alcune classi di base piuttosto Smalltalk che sono molto popolari e cross-Smalltalk implementazione:Collezioni e stream equivalenze di classi tra Smalltalk, Perl, Python e Ruby

FileStream 
ReadWriteStream 
Set 
Dictionary 
OrderedCollection 
SortedCollection 
Bag 
Interval 
Array 

Quali classi sarebbero le sostituzioni semantiche equivalenti o validi in Python, Perl e Ruby? Ho trovato diverse pagine di confronto linguistico che confrontano la sintassi, tuttavia sembra che ci sia un piccolo aiuto quando si arriva alla traduzione delle librerie di base e di base.

Mi chiedo anche se ci sia una classe base o core in Python, Perl o Ruby che non è presente in Smalltalk o viceversa?

+1

Ovviamente (dalle risposte) è necessario conoscere solo un po 'Smalltalk e alcuni dei _any one_ delle altre lingue per rispondere alla domanda utilmente. E c'è valore nel pubblicare una risposta anche se è "improbabile che venga [accettata]". Se pensi che sia "troppo aperto per ricevere una risposta diretta", dovresti aver votato per chiudere. – agf

+0

Non ho capito le tue affermazioni. Puoi chiarire? Sembra una domanda specifica con risposte specifiche e chiare. – user869097

+0

Stavo rispondendo a un commento ora cancellato. – agf

risposta

7

Perl

ti risponderò per Perl, dato che sono fluente in Perl e Smalltalk.

Il dizionario di Smalltalk è abbastanza vicino al tipo di hash di Perl. Un dizionario usa l'equivalenza dell'oggetto per le chiavi. Perl utilizza stringhe semplici per le chiavi, quindi la flessibilità è alquanto limitata.

OrderedCollection di Smalltalk è abbastanza vicino al tipo di matrice Perl.

FileStream di Smalltalk è un po 'come i filehandle di Perl, nel senso che rappresentano un flusso di dati su un file o dispositivo esterno.

E questo è tutto, dal momento che Perl ha solo hash e array e filehandle. :)

+0

Usando le funzioni Hash :: Util :: FieldHash è possibile ottenere hash con chiavi che sono puntatori numerati a oggetti e altri tipi che sopravvivono a CLONE e ricevono GCed insieme all'oggetto a cui si riferiscono. – MkV

+0

Aggiungi i nomi dei moduli CPAN che si adattano meglio. – 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) 

Vorrei sottolineare che non v'è un oggetto collections.Counter per Python 2.7, che è equivalente a Bag.

+0

'heapq' è una raccolta parzialmente ordinata. 'Array.array' è come una matrice di smalltalk? Inoltre, penso che "collections.Counter" (Python 2.7) sia una borsa. Che dire di 'slice' o' islice' per Interval? – agf

+0

array.array di Python è chiuso, ma contiene solo oggetti dello stesso tipo. Non sono sicuro di come la fetta possa sostituire Interval. Pensandoci però, xrange potrebbe essere un equivalente più azzeccato. Ma l'intervallo si sta trasformando in un xrange() avanzato in Python 3.0. – David

4

Rubino

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.