2011-08-25 21 views
7

Tôi có ít kinh nghiệm với các ngôn ngữ như Python, Perl và Ruby, nhưng tôi đã phát triển trong Smalltalk từ một thời gian. Có một số lớp học Smalltalk khá cơ bản là rất phổ biến và cross-Smalltalk thực hiện:Bộ sưu tập và các lớp Dòng tương đương giữa Smalltalk, Perl, Python và Ruby

FileStream 
ReadWriteStream 
Set 
Dictionary 
OrderedCollection 
SortedCollection 
Bag 
Interval 
Array 

Những lớp học sẽ là thay thế ngữ nghĩa tương đương hoặc có giá trị bằng Python, Perl và Ruby? Tôi đã tìm thấy một số trang so sánh ngôn ngữ so sánh cú pháp, tuy nhiên có vẻ như có rất ít sự trợ giúp khi đến bản dịch của các thư viện lõi và cơ sở.

Tôi cũng tự hỏi liệu có một lớp cơ sở hoặc lõi trong Python, Perl hay Ruby không có trong Smalltalk hoặc viceversa?

+1

Rõ ràng (từ câu trả lời), bạn chỉ cần biết một chút Smalltalk và một số _any one_ trong những ngôn ngữ khác để trả lời câu hỏi một cách hữu ích. Và có giá trị trong việc đăng một câu trả lời ngay cả khi nó "khó có được [chấp nhận]." Nếu bạn nghĩ rằng đó là "cách quá cởi mở để được trả lời trực tiếp", bạn nên bỏ phiếu để đóng. – agf

+0

Tôi không hiểu yêu cầu của bạn. Bạn có thể làm rõ? Có vẻ như một câu hỏi cụ thể với câu trả lời cụ thể và rõ ràng. – user869097

+0

Tôi đã trả lời nhận xét đã bị xóa. – agf

Trả lời

7

Perl

Tôi sẽ trả lời cho Perl vì tôi thông thạo cả Perl và Smalltalk.

Từ điển của Smalltalk tương đối gần loại băm của Perl. Một từ điển sử dụng tương đương đối tượng cho các phím. Perl sử dụng các chuỗi đơn giản cho các khóa, vì vậy tính linh hoạt có phần hạn chế.

OrderedCollection của Smalltalk tương đối gần với loại mảng của Perl.

Tệp tin của Smalltalk giống như tệp của Perl, theo nghĩa là chúng đại diện cho luồng dữ liệu đến tệp hoặc thiết bị bên ngoài.

Và đó là về nó, vì Perl chỉ có băm và mảng và tệp thủ công. :)

+0

Sử dụng hàm Hash :: Util :: FieldHash, bạn có thể nhận được băm với các khóa được đánh số theo các đối tượng và các kiểu khác tồn tại CLONE và nhận được GC cùng với đối tượng mà chúng tham chiếu. – MkV

+0

Thêm tên của các mô-đun CPAN phù hợp nhất. – 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) 

tôi nên lưu ý, rằng có một đối tượng collections.Counter cho Python 2.7 có nghĩa là tương đương với Bag.

+0

'heapq' là một bộ sưu tập được sắp xếp một phần. Là 'mảng.array' như một mảng smalltalk? Ngoài ra, tôi nghĩ 'collections.Counter' (Python 2.7) là một Bag. Còn về 'slice' hoặc' islice' cho Interval thì sao? – agf

+0

array.array của Python là gần, nhưng nó chỉ giữ các đối tượng cùng loại. Tôi không chắc làm thế nào lát có thể thay thế cho khoảng thời gian. Suy nghĩ về nó mặc dù, xrange có thể là một tương đương apt hơn. Nhưng, phạm vi đang chuyển thành một xrange() nâng cao trong Python 3.0. – David

4

của 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. 
Các vấn đề liên quan