Dictionary 类

 Dictionary 类是用来处理字典的类。

 字典,或者称为关联数组,是指保存着若干个名字和其唯一对应的值组成的“pair”的对象。
 字典和数组一样使用 [ ] (间接成员选择) 运算符来操作,不同的是把下标索引换成字符串,也就是名字(键)。名字可以作为标识符,用 . (直接成员选择) 运算符来对字典中的元素进行操作。
 还有,选择了不存在的元素的话,会返回 void 。
 使用 delete 运算符可以删除字典中的元素。

例:
    var d=new Dictionary();
    d["sat"] = 1; // 和 d.sat = 1 相同
    d["sun"] = 2; // 和 d.sun = 2 相同
    d["mon"] = 3; // 和 d.mon = 3 相同
    d["name"] ="value!"; // 和 d.name = "value!" 相同
    d["continue"] = 4; // 虽然 continue 不是有效的标识符,但是这样写没问题
    d.continue = 4; // 因为 continue 不是有效的标识符,这样写是错误的

    var sat = d["sat"]; // 1 被代入到变量 sat 中
    var none = d["none"]; // void 被代入到变量 none 中

    delete d.sat; // sat 被删除
    delete d["continue"]; // continue 被删除


表达式声明字典

 使用%[ ] ,可以在表达式中现场记述 Dictionary 类型的对象。以“元素名 => 元素的值”的形式,用逗号分隔,组成初始元素的表达式列举出来。例如,如果执行
    var dic = %["a" => 1, "b" => 2, "c" => 3];
 这样一个表达式,则变量 dic 将指向一个包含一个个的像 "a":1"b":2"c":3 这样的由名字和值成对组成的元素的 Dictionary 类型的对象。
 在内部,=> 和逗号的作用是完全一样的,=> 是为了便于阅读而设计的书写方式 ( 和 perl 一样 )。

对 Dictionary 类的方法的调用

 Dictionary 类型的对象在创建之后是任何一个成员都不包含的。(译者注:连方法都没有注册进去。我估计是因为 Dictionary 类型的对象中的所有元素都会被当作字典中的元素来处理。)
 例如,想要调用 assign 方法而对 Dictionary 类型的对象 dict 使用像 dict.assign(src) 的语法来操作的话,因为 dict 中不具备 assign 方法,这会产生错误。
 所以,应该使用 incontextof 运算符,把 Dictionary 类型的对象作为上下文,以直属于 Dictionary 类的方法对其进行操作。

例:
    var a = %[];
    var b = %[];
    (Dictionary.assign incontextof a)(b); // 由 b 复制到 a 
    (Dictionary.clear incontextof b)(); // 清除 b 的内容

saveStruct

 saveStruct 用来将结构化的数据输出到指定文件。
 请参照 Array 类 中的相同方法。

assign

 assign 方法用于字典的复制。

構文 : assign(<被复制的源字典>, <是否消除字典中原有的元素=true>)

 将作为参数指定的其他字典的内容全部复制进来。
 “是否消除字典中原有的元素”为假的时候,目的对象 (调用该方法的对象) 的内容并不会被清空,而是将源字典的内容覆盖进去。与原字典中名字相同的元素会被覆盖掉。

 将数组 (Array类型的对象) 指定为被复制对象的时候,数组中的对象会依次以 “名字、值、名字、值……” 的顺序结成对,然后复制到字典中。(译者注:数组中充当名字的元素应该是字符串,否则会产生错误)

assignStruct

 assignStruct 方法同样用于字典的复制。

構文 : assignStruct(<被复制的源字典>)

 将作为参数指定的其他字典的内容全部复制进来。
 和 assign 方法不同,源字典的元素中的值是数组或字典的时候,会进行递归复制 ( assign 方法的话,只会复制元素中数组或字典的引用 )。

clear

 clear 方法用来将字典中的所有元素全部消除。