= 40 and age < 60', action: '"Is middle-aged."' }, { name: 'Old', cond: 'age >= 60', action: '"Is old."' } ]; [Bindable] private var attrs:Array = [ // { attr, value }'s. { attr: 'age', value: 40, type: 'number' } ]; private function setCurrentRule():void { var rule:Object = rulesList.selectedItem; ruleName.text = rule.name; ruleCond.text = rule.cond; ruleAction.text = rule.action; } private function updateRule(asNew:Boolean=false):void { var rule:Object = { name: ruleName.text, cond: ruleCond.text, action: ruleAction.text } var a:Array = rules == null ? [] : rules; if (asNew) a.push(rule) else a[rulesList.selectedIndex] = rule; rules = null; rules = a; } private function addAttr():void { var a:Array = (attrs == null) ? [] : attrs; a.push({ attr: "(EDIT THIS)", type: "number", value: "(EDIT THIS)" }); attrs = null; attrs = a; } private function evaluate():void { // Collect all attributes and set it to x: var x:Object = {}; var o:Object; D.display("Attributes:"); for each(o in attrs) { if (o.attr != '' && o.attr != '(EDIT THIS)') { D.display(" " + o.attr + " = " + o.value); switch(o.type) { case 'number': x[o.attr] = Number(o.value); break; case 'boolean': x[o.attr] = Boolean(o.value); break; case 'string': x[o.attr] = String(o.value); break; default: x[o.attr] = o.value; break; } } } for each(o in rules) { if (D.evalToBoolean(o.cond, x)) { D.display('\n[Match: "' + o.name + '"]'); var result:Object = D.eval(o.action, x); if (result != null) D.display(" Returned: " + result); } } D.display("\n---------------------------------\n"); } ]]> number boolean string