Forked from: bkzen's throw で条件分岐 diff:43 haxe-like enum switch by throwing http://haxe.org/ref/enums wh0 forked:1favorite:2lines:57license : MIT License modified : 2012-04-08 07:49:44 Embed Tweet // forked from bkzen's throw で条件分岐 package { import flash.events.Event; import flash.events.MouseEvent; import com.actionscriptbible.Example; /** * throw 式条件分岐 * @author jc at bkzen */ public class Test90 extends Example { private var cnt: uint; public function Test90() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e: Event = null): void { removeEventListener(Event.ADDED_TO_STAGE, init); // trace("click"); stage.addEventListener(MouseEvent.CLICK, onClick); } private function onClick(e:MouseEvent):void { graphics.clear(); var c:Color2 = foo(); trace(c); graphics.beginFill(color2int(c)); graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); graphics.endFill(); } private function color2int(c:Color2):uint { try { throw c; } catch (red:Red) { return 0xff0000; } catch (green:Green) { return 0x00ff00; } catch (blue:Blue) { return 0x0000ff; } catch (gray:Gray) { return 0x010101 * gray.v; } catch (rgb:RGB) { return rgb.r << 16 | rgb.g << 8 | rgb.b; } /* default */ return 0x000000; } private function foo():Color2 { switch (cnt++%5) { case 0: return new Red(); case 1: return new Green(); case 2: return new Blue(); case 3: return new Gray(Math.random() * 128 + 128); case 4: return new RGB(Math.random() * 96, 255, Math.random() * 192); } // unreachable return null; } } } internal class Color2 { public function toString():String { return Object.prototype.toString.call(this) + ' ' + JSON.stringify(this); } } internal class Red extends Color2 { } internal class Green extends Color2 { } internal class Blue extends Color2 { } internal class Gray extends Color2 { public var v:int; public function Gray(v:int) { this.v = v; } } internal class RGB extends Color2 { public var r:int, g:int, b:int; public function RGB(r:int, g:int, b:int) { this.r = r; this.g = g; this.b = b; } } Code Fullscreen Preview Fullscreen bradsedito bkzen MouseEvent.ADDED_TO_STAGE call trace toString MouseEvent.CLICK MouseEvent Math.random String uint int sort new page view favorite forked pv89 forked from: haxe-like enum sw.. bradsedito forked:0 favorite:0lines:57 (diff:1)