2009-05-11 37 views
23

Bất cứ ai có thể cho tôi biết tại sao ActionScript 3, một ngôn ngữ gõ tĩnh, không có generics? Có quá nhiều việc không? Một điều lịch sử? Có cách nào để "giả" nó mà tôi đã không chọn chưa?Tại sao ActionScript không có "generics"?

Chỉnh sửa: cảm ơn rất nhiều câu trả lời! Lớp Vector về cơ bản là những gì tôi đang tìm kiếm và các thông tin khác cũng hữu ích.

+1

Tôi đã thấy 'Vector ' và rất vui mừng rằng ActionScript có các generics đa mục đích mà tôi bằng cách nào đó chưa biết. *Thở dài*. Tôi nên biết rõ hơn là có được hy vọng của mình. –

+0

Bạn có thể thử Haxe. Nó có generics và các tính năng mát mẻ khác. Và nó trong hộp biên dịch sang Flash. haxe.org & try.haxe.org –

Trả lời

23

Vector class mới là một dạng generics mà Actionscript 3 hiện hỗ trợ khi được biên dịch cho Flash Player 10. Chúng không hỗ trợ đặc tả của các lớp chung của bạn.

Tôi nghĩ Adobe sẽ triển khai chuẩn ES4 cuối cùng. Sẽ tốt hơn nếu họ có một đối thủ cạnh tranh có thể đẩy họ đi nhanh hơn theo đúng hướng. Tôi đã mong đợi nhiều hơn một chút từ các bản cập nhật cho AS3 khi họ chuyển sang CS4, nhưng tôi cho rằng lớp Vector mang tính cách mạng sẽ phải đủ. Có vẻ như họ đã dành rất nhiều thời gian để nâng cấp thư viện cho Flex và AIR, vì vậy có thể họ sẽ quay trở lại để cải thiện hỗ trợ ngôn ngữ sau này, nhưng nó có lẽ không phải là ưu tiên thực sự. Hãy nhớ rằng, Adobe là trong đó cho tiền, không cho cảm giác tốt của việc làm cho ngôn ngữ có thể ngọt ngào nhất.

+3

... huh? Đầu tiên không có thứ gì như "tiêu chuẩn ES4", và có lẽ sẽ không bao giờ có kể từ khi Ecma bỏ nó. Thứ hai, Adobe * đã làm * thực hiện dự thảo tiêu chuẩn ES4, và họ là những người duy nhất đã làm. (Họ đã viết một máy ảo cho nó và tặng nó cho nền tảng Mozilla, trước khi ECMA bỏ nó.) -> http://en.wikipedia.org/wiki/Ecmascript – fenomas

+2

@fenomas Hãy chỉnh sửa bài đăng để tạo nó chính xác hơn! – Kekoa

+0

bây giờ mà google dash đang dọa họ một chút cuối cùng họ bắt đầu nói về việc cải thiện các tính năng ngôn ngữ với khá nhiều mọi thứ chúng tôi đã yêu cầu trong nhiều năm về kết thúc - tra cứu "Actionscript Next". – JTtheGeek

0

Hãy đầu tiên lấy container thích hợp và các thuật toán trong ActionScript và sau đó lo lắng về Generics ...

as3 không phải là rất khác nhau từ javascript, btw, vì vậy câu hỏi của bạn sẽ loại áp dụng cho JS là tốt.

+1

mmm không nhiều lắm. Khi được sử dụng * mà không cần gõ * và ký hiệu lớp, ActionScript/rất giống với JavaScript ... Nhưng khi bạn bắt đầu sử dụng các gói, cú pháp lớp và gõ tĩnh, cách bạn sử dụng hai ngôn ngữ trở nên khá khác nhau. –

+8

Vâng, đó là giống như nói C++, hoặc tốt hơn, Mục tiêu-C, là "không phải là rất khác nhau" từ C.Trong thực tế, mặc dù C++/Obj-C là một siêu của C, nó không thực sự chính xác để nói rằng chúng về cơ bản là giống nhau. – Kekoa

2

Tôi tin rằng đó là một điều lịch sử. ActionScript được dựa trên ECMAScript (JavaScript cũng dựa trên ECMAScript). ECMAScript là một ngôn ngữ được nhập động, có nghĩa là các biến không được khai báo kiểu của chúng. Generics hữu dụng hơn trong các ngôn ngữ gõ tĩnh, trong đó kiểu biến được khai báo trước. Trong một ngôn ngữ gõ tĩnh, không có generics bạn đang mắc kẹt đúc tất cả các thời gian từ đối tượng gốc (ví dụ, Object trong Java). Đây không phải là một vấn đề trong ECMAScript, bởi vì bạn có thể đặt bất cứ thứ gì bạn muốn vào bất kỳ cấu trúc dữ liệu nào.

Vậy tại sao ActionScript không thêm generics khi họ thêm gõ tĩnh vào ECMAScript? Tôi không thể chắc chắn về điều đó, nhưng tôi nghĩ tiền đề của câu hỏi của bạn hơi lệch - có các hộp chứa chung, như Vector. Tôi có thể nghĩ rằng họ sẽ giữ các container ECMAScript (các đối tượng và mảng) tự động gõ cho tính tương thích ngược, nhưng chúng đã phá vỡ nó giữa AS2 và AS3, vì vậy tôi không chắc chắn.

2

loại Parameteric (từ 'Generics' thường được sử dụng trong ECMAScript cho generic methods, chứ không phải là sự kết hợp của các loại tham số và đa hình runtime sử dụng trong Java) đã proposed như một phần của ES4, nhưng ES4 bị gãy và phần lớn các hệ thống kiểu đề xuất cho ES (bao gồm cả các phần được thực hiện trong ActionScript) sẽ không đi vào phiên bản tiếp theo. Tôi không thể nói liệu Adobe có muốn đi theo cách đó một mình hay không.

Các vấn đề liên quan