0

背景

定义一个数组通常被演示为var array:Array = new Array(),然而,这将数组赋值降级为方法array.push(value)或线性声明,如...

array[0] = "apple"
array[1] = "orange"

显然,更简洁的格式是隐式声明,其中双括号被理解为定义一个数组,并自动处理索引。

var array:Array = ["apple", "orange"];

同样适用于对象...

var obj:Object = {
    "apple":"fritter",
    "orange":"pie"
}

问题

尝试隐式定义字典的键:值对时会出现问题。 阅读文档,我很震惊地发现课堂上只有一种方法。它扩展 Object 的事实至少意味着for ... in可用,但这就是便利的终点。

特别是因为我们要使用弱键,字典可用的一个参数需要设置为true,从而排除任何类型的隐式定义。相同的文档概述了我用数组演示的前一种(较长)格式的典型用法:

var dict:Dictionary = new Dictionary(true);
dict[key] = "Letters";

这对于复杂的结构来说是行不通的。

[编辑的with论点]

因为 Array 和 Object 的文档从来没有真正解释过隐式声明,所以我不禁想象有一种方法可以用字典来做到这一点。有人知道吗?

我现在在想,我唯一的选择是想出某种将复杂对象树映射到字典的方法……这很愚蠢,因为仅使用首先演示的 long 方法会更快。

4

1 回答 1

0

首先,即使您使用Object原始问题中的字符串编写代码并且不引用字符串,您也不会收到预期的结果。而且,如果您尝试将对象用作with语句中的键,编译器将会混淆您是否想要dict[obj]或只是obj被分配一个值。因此,如果要向Objector添加属性Dictionary,请使用括号语法:

obj["apple"]="fritter";
dict[obj]="bar";

等等。

于 2013-08-19T14:27:52.693 回答