Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    53

    nomi di variabile dinamici

    Buon giorno,

    in Flash 8 AS2, vorrei creare delle variabili con nomi prelevati da array.
    Se non volessi utilizzare la tipizzazione forte dei dati potrei inserire il riferimento all'array tra quadre preceduto dal percorso.
    Ma volendo utilizzare var mi viene mostrato il seguente errore:

    è previsto un identificatore !!

    Questo il codice che uso:

    var mioArray:Array = Array({msg:"Caricamento A", nomelayer:"nomeA", File:"lineaA.xml"} etc
    (...)
    // prendo il nome variabile da mioArray[n].nomelayer senza var --> Funziona
    _root[mioArray[counter].nomelayer] = bla bla bla
    // Se invece utilizzo var per la tipizzazione forte mi da l'errore
    var [mioArray[counter].nomelayer]ggettoarray = bla bla bla

    La causa dell'errore mi è chiaro ma la soluzione non la trovo.
    Suggerimenti?
    Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    La causa dell'errore non è quella che pensi tu: il data typing serve per valutare gli errori sul tipo delle variabili "al momento della compilazione", e non durante l'esecuzione del filmato. Per questo motivo, come puoi codificare il tipo di dati di una variabile di cui

    a) non sai il nome
    b) non sai cosa conterrà

    ?
    Non c'è una "soluzione" diretta al problema, se non utilizzando appunto il sistema che stai usando tu oppure direttamente attingendo all'array come una tabella di valori (perchè creare delle variabili se tutta la definizione nome-tipo-contenuto è già nell'array?)

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    53
    Originariamente inviato da negatyve
    La causa dell'errore non è quella che pensi tu: il data typing serve per valutare gli errori sul tipo delle variabili "al momento della compilazione", e non durante l'esecuzione del filmato. Per questo motivo, come puoi codificare il tipo di dati di una variabile di cui

    a) non sai il nome
    b) non sai cosa conterrà
    Non c'è una "soluzione" diretta al problema, se non utilizzando appunto il sistema che stai usando tu oppure direttamente attingendo all'array come una tabella di valori (perchè creare delle variabili se tutta la definizione nome-tipo-contenuto è già nell'array?)

    Ci rifletto un po' su, perché

    non mi convince molto il discorso che non so a priori cosa contenga la mia variabile (nel mio caso è una variabile con nomi di oggetti quindi una stringa)

    inoltre

    il riferimento all'array come tabella di valori (che non avevo preso in considerazione ma che ha i suoi bei perchè) potrebbe non essere il massimo se volessi liberare risorse cancellando array multidimensionali. Inoltre c'è il problema dell'indice counter che dovrei registrare da qualche parte a meno di verificare ogni volta tutto l'array alla ricerca dell'indice giusto

    Nel frattempo ti ringrazio per la risposta lampo
    CIAO

  4. #4
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    >non mi convince molto il discorso che non so a priori cosa contenga
    >la mia variabile (nel mio caso è una variabile con nomi di oggetti quindi una stringa)

    No infatti, nel tuo caso lo sai già, ma come ti dicevo si tratta di una verifica da fare al momento della compilazione, e in quel momento il compilatore non può sapere come si chiamerà la variabile. A proposito invece dell'indice per la ricerca nell'array, quello è proprio il caso in cui usare un array associativo ( e infatti a partire dall'actionscript 3 è stato introdotta la classe Dictionary). Ad esempio, potresti fare:

    Codice PHP:
    var dizionario:Object = new Object();
    dizionariomioArray[counter].nomelayer ] = "bla bla bla"
    per poi recuperare la variabile tramite:

    Codice PHP:
    tracedizionariovariabile ] ); 
    Rimane che perdi la possibilità di settare il tipo di dato della variabile, ma ciò, ripeto, vale solo al momento della compilazione. Al momento dell'esecuzione, puoi verificare il tipo con un instanceof, ad esempio:

    Codice PHP:
    var nomeVariabile:String  "pippo";
    var 
    contenutoVariabile:String = new String"ciao" );

    var 
    dizionario:Object = new Object();
    dizionarionomeVariabile ] = contenutoVariabile;

    tracedizionarionomeVariabile ] instanceof String ); // true
    tracedizionarionomeVariabile ] instanceof Number ); // false
    tracedizionarionomeVariabile ] instanceof Array ); // false
    tracedizionarionomeVariabile ] instanceof Function ); // false 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.