为什么ActionScript没有“泛型”?

时间:2009-05-11 14:24:35

标签: actionscript-3

有谁能告诉我为什么ActionScript 3,一种静态类型的语言,没有泛型?工作太多了吗?历史的事情?是否有某种方法可以“伪造”它还没有拿起来?

编辑:非常感谢您的答案! Vector课程基本上就是我想要的,其他信息也很有帮助。

4 个答案:

答案 0 :(得分:23)

新的Vector class是ActionScript 3在为Flash Player 10编译时支持的一种泛型。它们不支持您自己的泛型类的规范。

我认为Adobe最终将实施ES4标准。如果他们有竞争对手可以更快地将他们推向正确的方向,那就太好了。当他们搬到CS4时,我对AS3的更新有所期待,但我认为革命性的Vector类必须满足。

看起来他们花了很多时间来加强Flex和AIR的库,所以他们可能会在以后改进语言支持,但它可能不是真正的优先事项。请记住,Adobe是为了钱,而不是为了制作最甜蜜的语言。

答案 1 :(得分:2)

我认为这是历史性的事情。 ActionScript基于ECMAScript(JavaScript也基于ECMAScript)。 ECMAScript是一种动态类型语言,意味着变量没有声明其类型。泛型在静态类型语言中更有用,其中变量的类型是在前面声明的。在静态类型语言中,如果没有泛型,则会始终从根对象(例如,Java中的Object)进行投射。这不是ECMAScript中的问题,因为您可以将任何想要的内容放入任何数据结构中。

那么为什么ActionScript在向ECMAScript添加静态类型时没有添加泛型?我不能确定这一点,但我认为你的问题的前提是有点偏离 - 有泛型的容器,例如Vector。我可能认为他们会保留ECMAScript(对象和数组)的动态类型容器以实现向后兼容,但是它们已经在AS2和AS3之间打破了,所以我不确定。

答案 2 :(得分:2)

参数类型(“generics”一词通常用于generic methods的ECMAScript,而不是Java中使用的参数类型和运行时多态的组合)proposed是ES4的一部分,但是ES4破解和为ES提出的大部分类型系统(包括在ActionScript中实现的部分)都不会进入下一个版本。我不能说Adobe是否想要自己这样做。

答案 3 :(得分:0)

让我们首先在actionscript中获取适当的容器和算法,然后担心泛型......

as3与javascript,btw没有什么不同,所以你的问题也适用于JS。