Visualizzazione dei risultati da 1 a 5 su 5

Discussione: return dento eval()

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    20

    return dento eval()

    ciao a tutti,
    si può inserire dentro ad una eval() un'istruzione return?
    ecco la mia funzione come dovrebbe essere:

    function prova(a,b){
    str='if(a=b) return(a) else return(b)';
    eval(str);
    }

    questa cosa può funzionare o no?
    se la eseguo con Visual Interdev, quando esegue la eval() mi dice "istruzione return esterna alla funzione" e causa un errore di compilazione...

    grazie a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non so se parli di JS, comunque io farei:

    return (a==b) ? a : b;

    Nota il doppio uguale enlle comparazioni.

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    20
    a parte il doppio uguale (mi è scappato perchè ho scritto la funzione al volo), la mia stringa è molto più complicata. ecco cosa devo fare:

    for(k=i+1;k<=j;k++){
    if(parseInt(tabella[k][colonna])>parseInt(tabella[i][colonna]))
    return(tabella[k][colonna]);
    else if(parseInt(tabella[k][colonna])<parseInt(tabella[i][colonna]))
    return(tabella[i][colonna]);
    }

    quello che c'è dentro al for può essere scritto così come sopra, oppure in questo modo:

    if(parseInt(tabella[k][colonna])>parseInt(tabella[i][colonna]))
    return(tabella[k][colonna]);
    else if(parseInt(tabella[k][colonna])<parseInt(tabella[i][colonna]))
    return(tabella[i][colonna]);

    il fatto di concatenare o no i vari parseInt dipende dal parametro "num" che arriva alla function. ecco come ho scritto la mia funzione (sono andato a capo solo per spezzare le varie parti della stringa finale per essere più chiaro):

    str=''if(''+
    ((num)?''parseInt('':'''')+
    ''tabella[k][colonna]''+
    ((num)?'')'':'''')+
    ''>''+
    ((num)?''parseInt('':'''')+
    ''tabella[i][colonna]''+
    ((num)?'')'':'''')+
    '') return(tabella[k][colonna]; else if(''+
    ((num)?''parseInt('':'''')+
    ''tabella[k][colonna]''+
    ((num)?'')'':'''')+
    ''<''+
    ((num)?''parseInt('':'''')+
    ''tabella[i][colonna]''+
    ((num)?'')'':'''')+
    '') return(tabella[i][colonna])'';

    for(k=i+1;k<=j;k++){
    eval(str);
    }

    ci sono altri modi secondo voi per farlo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ci provo, poi dimmi se ti va bene.
    codice:
    if(num) {
      if(parseInt("tabella[k][colonna]) > parseInt(tabella[i][colonna]) )
        return(tabella[k][colonna]; 
      else if(parseInt(tabella[k][colonna]) < parseInt(tabella[i][colonna])
        return(tabella[i][colonna]);
    } else {
      if(tabella[k][colonna] > tabella[i][colonna] 
        return(tabella[k][colonna];
      else if (tabella[k][colonna] < tabella[i][colonna] 
        return(tabella[i][colonna]);
    }
    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    20
    si, direi proprio che può funzionare!

    io tra l'altro ho pensato anche ad un'altra cosa, cioè fare

    codice:
    for(k=i+1;k<=j;k++){
      if(eval(s1))
        return(tabella[k][colonna]);
      else if(eval(s2))
        return(tabella[i][colonna]);
    }
    dove s1 e s1 sono ooportunamente costruite secondo le regole dei precedenti post.

    secondo te quale soluzione è la migliore?

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.