madhacker, il 17/07/2009 - 10:08, ha scritto:
perchè credo che vada distrutta così
m=0
e non
m[0]=0
che invece assegna il valore 0 al primo elemento dell'array
Non mi sembra completa la tua spiegazione: Dato che non stiamo parlando di problemi spirituali dove Fede, e l'inspiegabile padroneggiano.
Si tratta di capire come l'interprete considera e risolve le istruzioni che gli passiamo,
Solo riuscendo a comprendere la logica matematica del'algoritmo potremo dire:
Io con gli Array e le matrici di mShell ci faccio quello che voglio!.
Altrimenti siamo dei maghetti che buttano lì delle parole magiche, perché l'abbiamo visto fare ad altri e a volte fanno quello che ci si aspetta.
Allora ripartendo da questo esempio fatto a suo tempo, facciamo queste variazioni:
m=["a","b"]
m[0]=m
m[0]=0
print m
->[0,"b"]
Ripartiamo con modifiche....
m=["a","b"]
m[0]=1 questa istruzione sembra che la veda così:
La presenza delle parentesi quadre dopo il nome del'array e la seguente presenza del'Uguale
Indica a mShell la volontà di assegnare un valore ad un elemento del'array.
O meglio indica che le operazioni seguenti sono assegnazioni applicate agli elementi del'array
m[0]=1
Distruggi l'attuale valore e tipizzazione contenuto nella locazione
m[0] e sostituiscilo con il valore e la tipizzazione presenti dopo il segno uguale
Distrugge
"a" elimina tipizzazione carattere e pone 1 e lo tipizza a numerico
m[0]=m
In questo caso: distrugge 1 e la tipizzazione numerica nel voler assegnare il nuovo valore e tipo
si accorge che è un puntatore alla matrice
m perciò assegna il valore numerico che punta a
m e pone la tipizzazione a puntatore.
m[0]=0
In questo caso come detto sopra cé il nome del'array seguito dalle parentesi quadre e dal segno uguale
quindi lo interpreta come un azione di assegnazione da svolgere sul singolo elemento del'array.
Perciò: distrugge il puntatore e la tipizzazione esistente alla cella 0 e vi assegna il nuovo
valore 0
(Senza andare a vedere a cosa puntava detto puntatore! il che avrebbe portato a distruggere la matrice m).
print m
->[0,"b"]
In questa altra situazione:
p=null
m=["ciao",p]
p=[0,1,m]
m[1]=p
print p[2][1]
->0,1,[...<2>]]
p[2][0]="a"
print p
->[0,1,[...<2>]]
print m
->[a,[...<3>]] <----Perchè ha modificato la matrice m di origine?
p[2][0]="a"
Nome array seguito da parentesi quadra non indica a mshell di eseguire un assegnazione in un suo elemento
perché dopo la parentesi quadra di chiusura non cè il segno = ma un ulteriore parentesi quadra aperta!
che indica solo una cosa...alla locazione p[2] cè un puntatore ad un altro array!!
Perciò: preleva il puntatore va a vedere che matrice è (
m) a la sostituisce nel'espressione diventando così:
p[2][0]="a" -> diventa
m[0]="a" e qui esegue quanto esposto sopra assegnando la lettera "a".
Vi sembra logico il tutto? sono riuscito a capire l'algoritmo che mShell applica agli array?
che dite?
Ovviamente:
m=0 penso che non sia indispensabile spiegare cosa fà in mshell.
Se vi ho annoiato chiedo Venia.
Anche se ritengo fondamentale padroneggiare gli array in mShell essendo una delle parti più potenti di questo linguaggio.
Se non capisco i meccanismi sopra riportati, mi ci vedete a gestire una matrice multidimensionale che al suo interno contiene dati,funzioni,altri array che richiamano altre funzioni e dati????.
In caso non foste d'accordo e mi chiamaste in giudizio come direbbe Perry Mezzon (Un Perry Mason poco sveglio!) Signor Giudice.....MI OPPONGO!.....
Messaggio modificato da lento il 18 luglio 2009 - 16:51