We should use Dictionary as the implementation of LzInheritedHash. (I
actually wrote a JS1 Dictionary class and it is in the LFC, but I
decided it was too slow to use.)
On 2008-02-12, at 15:06 EST, Henry Minsky wrote:
First, there is a hash table that uses object equality. Presumably it
is implemented in an efficient manner...
Package flash.utils
Class public dynamic class Dictionary
Inheritance Dictionary Inheritance Object
Language Version : ActionScript 3.0
Player Version : Flash Player 9
The Dictionary class lets you create a dynamic collection of
properties, which uses strict equality (===) for key comparison on
non-primitive object keys. When an object is used as a key, the
object's identity is used to look up the object, and not the value
returned from calling toString() on it. Primitive (built-in) objects,
like Numbers, in a Dictionary collection behave in the same manner as
they do when they are the property of a regular object.
Second, there is a class called Proxy, that lets you dynamically
create getters and setters. We seem to be
pushing all of that to compile time, but there might be some use for
this..
Package flash.utils
Class public class Proxy
Inheritance Proxy Inheritance Object
Language Version : ActionScript 3.0
Player Version : Flash Player 9
The Proxy class lets you override the default behavior of ActionScript
operations (such as retrieving and modifying properties) on an object.
The Proxy class has no constructor, and you should not attempt to
instantiate Proxy. Instead, subclass the Proxy class to override
methods such as getProperty and provide custom behavior. If you try to
use a method of the Proxy class without overriding the method, an
exception is thrown.
And, keep in mind, your own code overriding the methods of the Proxy
class can throw exceptions unintentionally. Throwing exceptions when
using these methods causes problems because the calling code (using
operators like in, is, delete and others) does not expect exceptions.
Unless you're already sure your overriding method does not throw
exceptions, Adobe recommends using try..catch statements around your
implementation of the Proxy class to avoid fatal errors when operators
call your methods. For example:
dynamic class MyProxy extends Proxy {
flash_proxy override function callProperty(name:*, ...rest):* {
try {
// custom code here
}
catch (e:Error) {
// respond to error here
}
}
The Proxy class is a replacement for the Object.__resolve and
Object.addProperty features of ActionScript 2.0, which are no longer
available in ActionScript 3.0. The Object.addProperty() feature
allowed you to dynamically create get and set methods in ActionScript
2.0. Although ActionScript 3.0 provides get and set methods at compile
time, you cannot dynamically assign one to an object unless you use
the Proxy class.
To avoid collisions with the public namespace, the methods of the
Proxy class are in the flash_proxy namespace.
Where methods of the Proxy class take a name argument, name can be
either a String or a QName object (if namespaces are being used).
--
Henry Minsky
Software Architect
[EMAIL PROTECTED]