07. maj 2001 - 15:50Der er
8 kommentarer og 1 løsning
variabel navngivning til variabler
Hejsa
hvordan kan man, i lingo, oprette variabler, hvis navn udledes af andre variabler?
fx til dette formål (med eksemplet fungerer ikke)
repeat with i = 1 to amountOfKids set string(\"Kid\"&i) to new(script \"orderKids\") end repeat
Jeg vil gerne kunne oprette en række objekter ud fra et parentscript, men jeg ved ikke på forhånd om jeg skal oprette 10 eller 700 objekter, derfor vil jeg oprette dem via en repeat løkke. Jeg ved bare ikke hvordan jeg kan få løkken til at generere objekter med nye navne...
En effektive måde for dette er at udnytte symboler fks. #Kid1,#Kid2,.. til at referere dine objekter.
Navne og objekter genereres således
global Kidlist set KidList = [:]
repeat with i = 1 to amountOfKids set KidName = string(\"Kid\"&i) set KidSymbol = value(KidName) setaProp(KidList,KidSymbol,new(script\"orderKids\") end repeat
til orientering fant jeg frem til at benytte denne metode, og det vil jeg gerne høre kommentarer i forhold til:
Repeat with i = 1 to maxAmount
BuildVarString = string(\"set var\"&i& \" to new(script \" &numtochar(34)&\"parentScript\"&numtochar(34)&\")\")
Do BuildVarString End repeat
The \"Do BuildVarString\" simply executes the string of that variable as normal lingo!! that is COOL !
Jeg benytter numtochar(34) for at skabe et \", da jeg ikke kan finde ud af om lingo har en escape character som fx. PHP hvor man kan skrive \\\" i en streng, og derved undgå at strengen opfattes som afsluttet, men derimod få selve gåseøjet med ind som en del af strengen.
Du kan også bruge lingo konstanten \"QUOTE\". fks. put \"set Var\" & i && \"to new(script \" & QUOTE & \"parentScript\" & QUOTE & \")\"
Den eneste ulempe ved string operationer er at de er særdeles langsomme i Lingo...Din metode er velegnet til dynamisk script-generation, og dets potentiale enorm.Det er COOL! Operationer med symboler er derimod noget af det hurtigste og de kan nemt konverteres tilbage til en \"string\" når det kræves. Prøv fks. put string(#Kid3)
men kan ikke deklarere globaler i den, og det skal jeg jo kunne...
men dit eksempel virker heller ikke helt efter hensigten, jeg har slået debuggeren til, og kan se, at det er fordi
set KidSymbol = value(KidName)
genererer <void>
en anden ting er, at jeg ikke helt er klar over, hvordan jeg får disse objekter til at arbejde for mig. Nu er de i hukommelsen på hver deres adresse, som er gemt i min property liste, men jeg skal vel have erklæret alle mine objektnavne (kidSymbol) som globals eller hvad? og det ken jeg ikke finde ud af, for jeg kan ikke skrive
global getAt(list,3) eller global string(getAt(list,3)) eller global value(getAt(list,3))
og jeg kan ikke bruge mit \"do-trick\", da globaler ikke kan erklæres heri.
repeat with i = 1 to amountOfKids set KidName = string(\"#Kid\"&i) set KidSymbol = value(KidName) setaProp(KidList,KidSymbol,new(script\"orderKids\") end repeat
Det ordner <VOID> delen
Kun PropertyListen \"KidList\" skal deklareres som global. De individuelle objekter behøver ikke.
Hvis du på et senere tidspunkt gerne vil sende en besked til fks. objektet i #Kid3, kan det gøres således:
doSomething getaProp(KidList,#Kid3) eller doSomething KidList[#Kid3]
Med hensyn til din do funktion behøver du blot deklarere en tom global list før dit repeat loop
fks.
global myKidList
set myKidList = [:]
---generer property navne og objekter ---gem i listen
Hej mikkel & lingoman Man kan også konvertere til et symbol direkte
set KidName = string(\"Kid\"&i) set KidSymbol = symbol(KidName)
Det er også vigtigt at den globale variabel er inden for handleren når man laver en DO. Normalt kan man bare have sin globale variabler i toppen af et script, men ikke når det gælder DO. Jeg tror også at det er det lingoman mener, men jeg ville bare understrege det yderligere
Lige en bemærkning til mit script ovenover. Når jeg skriver: put (the globals)[#var1] så er det i forhold til at man har kaldt sine variabler var. Det kunne også være: put (the globals)[#kid1]
dejligt at blive så informeret, tak til jer begge !
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.