07. december 2006 - 20:10Der er
19 kommentarer og 2 løsninger
Metoders metoder
I Flash er indbygget en klasse kaldt System. Den har blandt andet en metode kaldt capabilities - som igen har en metode, eksempelvis hasAudio, som kalder en variabel.
Hvordan laver man sådanne "undermetoder", eller hedder de måske "nestede metoder"?
Der kommer dog intet fornuftigt ud af at lave metoder på metoder, men man kan godt - Function er faktisk en "dynamic" klasse, så man kan have egenskaber på den uden de er definerede i klassedefinitionen (ligesom MovieClip).
Det er nok bare mig, der er lidt for hurtig... Men se hér:
public function set _xPoint(setX:Number):Void { xP = setX; } var nonInfluencing:Function = new Function(); public function set nonInfluencing._xPoint(setX:Number):Void { xP = setX; }
Dette giver fejl. Den er ikke initialiseret på samme måde som dine metoder, men kan jeg godt gøre det på samme måde som din? I så fald, hvordan?
public function T() { what = new Function(); what.speak = function(s:String) { trace("stop doing that" + s); } speak(" please"); } public function speak(s:String) { what.speak(s); } }
Vi kommer tættere på. Nu blot et problem, der forårsager et andet:
1. Der er blevet defineret en funktion speak, som kan kaldes som både *.what.speak og *.speak. Forårsaget problem: Jeg kan ikke splitte det op, så jeg har en *.what.speak og en *.speak. Jeg vil gerne have, at begge ting er mulige :)
class T { public function T() { trace("initialized"); } public function what():Void { trace("what"); function speak():Void { trace("what.speak"); } } public function speak():Void { trace("speak"); } }
Denne kan så godt få what og what.speak til at du, men overskriver vidst speak:
class T { public function T() { trace("initialized"); } public function what():Void { trace("what"); this.speak = function():Void { trace("what.speak"); } } public function speak():Void { trace("speak"); } }
class T { public function T() { trace("initialized"); } public function what():Void { trace("what"); what.speak = function():Void { trace("what.speak"); } } public function speak():Void { trace("speak"); } }
Hvorfor jeg vil lave metoders metoder? Simpelt: Jeg har en klasse med en lang række metoder, samt tilsvarende "ikke-metoder", hvis man kan kalde dem det. I hvert fald metoder, der skal hedde det samme, dog med et "ikke" foran metodens navn eksempelvis. For jeg har metoder, der kan sætte x-, y- og z-værdier. Hvis jeg sætter x-værdien i sig selv, skal det enten kunne påvirke eller ikke påvirke de andre koordinater. Derfor har jeg en _xPoint og en nonInfluence._xPoint.
Jeg finder dette langt mere overskueligt, og man bygger jo oftest koden op efter overskuelighed, så den er nem at redigere i og benytte som færdig klasse bagefter :)
Hvis du vil spørge, hvorfor jeg brugte en lidt hjemmebrygget metode, må jeg dertil svare, at jeg ikke kunne få din til at du ordentligt, men derimod duede mig efter min hensigt. Dog kan man ikke initialisere som set eller get mere, men det går nok. Jeg har nemlig ikke nonInfluence._xPoint, der kan læse uden af påvirke, for det gør de i forvejen ;)
maghem, det lyder som det mærkeligste, jeg længe har set - find en god bog om design patterns og brug det til at finde sædvanlige metoder til at løse specifikke problemer - din løsning her er meget unormal og fuldstændig uforståelig for dig selv og alle andre om en måned :)
Nej, nej, tro mig, det er det smarteste for mig. :)
Og nej, jeg kan ikke bare sende en parameter mere med, for jeg har alle følgende:
set _xPoint get _xPoint (set) nonInfluence._xPoint
Desuden skal kun jeg redigere i koden, og jeg forstår det selv udemærket :)
Jeg kan i øvrigt ikke se, hvorfor det er så mærkeligt, men det er jo op til din vurdering.
Og så siger du noget om en god bog om design patterns... Kan du anbefale én/et par stykker, og eventuelt fortælle, hvad det er, jeg køber, når jeg køber en sådan bog?
Og jeg er helt enig med Barklund, det er ikke en pæn måde at gøre det på, og den er heller ikke smart i henhold til performance.
Design patterns er afprøvedede måder at tilgå almidelige problemstillinger i programarkitektur. Og en ualmindelig god ide at studere. En søgning på "design patterns" i google burde give læsestof til et par dage :)
Tark for points - jeg vil nu stadig mene, at det ikke er den bedste løsning - og når du selv kommer tilbage til det om en måned aner du ikke, hvad det går ud på. :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.