No worries, Zeh. I'm glad it was of use. Cheers Juan Pablo Califano
2009/4/12 Zeh Fernando <[email protected]> > Many thanks for the in-depth reply, Juan. I learned something today. > > Zeh > > On Sun, Apr 12, 2009 at 5:14 PM, Juan Pablo Califano < > [email protected]> wrote: > > > The problem is that, while static initializer blocks look like their > > counterparts in Java, they have a little but important difference. Even > > though you use curly braces, you're not creating a new scope. In AS, > scope > > is either class / global or local (to a function or method). > > > > So, you cannot declare var i:int and access it statically, since by > default > > variables and methods are not static. An option is to make i static as > you > > did, but it looks ugly, since i is clearly a temporary variable. > > > > In C# you can declare a static constructor to handle such a situation > (I'm > > not 100% sure, but I think you can't use static initializers). This > > constructor is automatically called when the class is loaded, or at > least, > > before the first instance is created. > > > > In Actionscript, you don't have this feature, but you can do something > > similar, except you'd have to call your "static constructor" (or, more > > properly, initializer method) manually. > > > > You could do something like this: > > > > > > private static var BLACK:TextFormat = new TextFormat('Arial', 24, > > 0x000000, true); > > private static var RED:TextFormat = new TextFormat('Arial', 24, > > 0xFF0000, true); > > > > // run static initializer method > > { > > staticInit(); > > } > > > > private static function staticInit():void { > > BLACK.letterSpacing = -4; > > RED.letterSpacing = -4; > > // i is now a local var and will go out of scope when this > function > > returns > > for (var i:int = 0; i < 10; i++) > > trace(i); > > } > > > > In fact, there is a static constructor, but it's created ad hoc by the > > compiler and called automatically by the runtime when the class is > > initialized. If you decompile / disassemble your code, you'll see a > method > > called: > > > > static function YourClassName$cinit() > > > > This method contains all the inline static initializers. But since it's > > generated by the compiler, you cannot declare it yourself. > > > > Nevertheless, making your own static initializer method and calling it > > seems > > a bit cleaner if you need some static initialization logic. > > > > > > Cheers > > Juan Pablo Califano > > > > > > 2009/4/12 Alexander Farber <[email protected]> > > > > > Hello, > > > > > > I have a static initializer in my class and it works ok: > > > > > > private static var BLACK:TextFormat = new TextFormat('Arial', 24, > > > 0x000000, true); > > > private static var RED:TextFormat = new TextFormat('Arial', 24, > > > 0xFF0000, true); > > > // place "1" closer to "0" in the "10" string > > > { > > > BLACK.letterSpacing = -4; > > > RED.letterSpacing = -4; > > > } > > > > > > But when I try to add a for-loop there (I need to > > > add some data to static array I have in the class), > > > then I get errors "Access of undefined property i": > > > > > > { > > > BLACK.letterSpacing = -4; > > > RED.letterSpacing = -4; > > > > > > for (var i:uint = 0; i < 10; i++) > > > trace(i); > > > } > > > > > > I have to move the variable i outside the initializer: > > > > > > private static var i:uint; > > > { > > > BLACK.letterSpacing = -4; > > > RED.letterSpacing = -4; > > > > > > for (i = 0; i < 10; i++) > > > trace(i); > > > } > > > > > > Isn't it strange? It looks ugly to me... > > > > > > Regards > > > Alex > > > _______________________________________________ > > > Flashcoders mailing list > > > [email protected] > > > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > > > > > _______________________________________________ > > Flashcoders mailing list > > [email protected] > > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > > > _______________________________________________ > Flashcoders mailing list > [email protected] > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > _______________________________________________ Flashcoders mailing list [email protected] http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

