Bonjour à tous
Aprés avoir créér une variable dans un classeur nommée jeu52 qui est une liste de string de 52 éléments
j'ai écrit le code suivant
jeu=var.recall("jeu52")
function melange(l)
local i,p
for i=1,52 do
p=math.random(1,52)
l[i],l[p]=l[p],l|i]
end
return l
end
mel=melange(jeu)
Aprés exécution mel contient la liste mélangée OK!
mais jeu est aussi affectée et est pareil à mel ????
en faisant divers essais je me suis rendu compte que si je virais "return l"
que je faisais mel=jeu et qu'aprés seulement j'appellai melange(mel) sans affectation
mel se mélangeait et jeu aussi
Je veux bien comprendre pour mel , j'ai déja vu ça en basic on parle de transmission de paramétre par référence opposée à la transmission par valeur
mais pour jeu je pige pas!! quoique si jeu serait transmis comme référence et affectée puis le résultat l serait transmis à mel
mais dans le deuxième cas? et si c'est ça comment fait on une transmission par valeur pour que la var transmise ne soit pas affectée?
si quelqun pouvait éclairer ma lanterne
merci d'avance
appel de fonction
-
tyann
Niveau 4: MC (Membre Confirmé)- Messages: 13
- Inscription: 19 Sep 2007, 13:38
- Localisation: REIMS
- Genre:
- Calculatrice(s):→ MyCalcs profile
Re: appel de fonction
En effet, les arguments de type table sont passés en référence implicitement, et on ne peux rien y faire.
Le mieux est de passer à la fonction un nouveau tableau, copie du premier :
Si plus tard tu utilises des tables de tables, il faudra utiliser une copie profonde de la table :
Le mieux est de passer à la fonction un nouveau tableau, copie du premier :
- Code: Tout sélectionner
------ Simple Table Copy
function table.copy(t)
local u = { }
for k, v in pairs(t) do
u[k] = v
end
return setmetatable(u, getmetatable(t))
end
Si plus tard tu utilises des tables de tables, il faudra utiliser une copie profonde de la table :
- Code: Tout sélectionner
------ Deep Table Copy
function table.copy(t)
local u = { }
for k, v in pairs(t) do
u[k] = type(v) == "table" and table.copy(v) or v
end
return setmetatable(u, getmetatable(t))
end
-
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)- Messages: 6414
- Images: 22
- Inscription: 27 Nov 2008, 00:00
- Localisation: 0x1AACC355
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: BAC+5: Epita (ING3)
Re: appel de fonction
(pour le deep copy, en plus détaillé ca donne ca : )
(This function recursively copies a table's contents, and ensures that metatables are preserved. That is, it will correctly clone a pure Lua object.)
(This function recursively copies a table's contents, and ensures that metatables are preserved. That is, it will correctly clone a pure Lua object.)
- Code: Tout sélectionner
function deepcopy(t)
if type(t) ~= 'table' then return t end
local mt = getmetatable(t)
local res = {}
for k,v in pairs(t) do
if type(v) == 'table' then
v = deepcopy(v)
end
res[k] = v
end
setmetatable(res,mt)
return res
end -- from http://snippets.luacode.org/snippets/Deep_copy_of_a_Lua_Table_2
MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)-
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)- Messages: 14623
- Images: 1218
- Inscription: 01 Juin 2007, 00:00
- Localisation: France
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Twitter/X: adriweb
- GitHub: adriweb
Re: appel de fonction
Merci à vous pour vos réponses , je pense avoir compris le principe , malheureusement je me heurte à une nouvelle difficulté le code décrit précédemment fonctionne bien
sur le logiciel PC mais pas sur la calculatrice.
J'obtient le message "attempt to index local 'l' (a nil value) à la ligne l[i],l[p]=l[p],l[i].
je suppose que ça veut dire que l n'a pas de valeur ?
j'ai vérifié dans le classeur 'jeu52' est bien présente ?????
c'est la secode fois que j'observe une différence de fonctionnement entre le logiciel et la machine
si quelqu'un a une explication je suis preneur
merci d'avance.
sur le logiciel PC mais pas sur la calculatrice.
J'obtient le message "attempt to index local 'l' (a nil value) à la ligne l[i],l[p]=l[p],l[i].
je suppose que ça veut dire que l n'a pas de valeur ?
j'ai vérifié dans le classeur 'jeu52' est bien présente ?????
c'est la secode fois que j'observe une différence de fonctionnement entre le logiciel et la machine
si quelqu'un a une explication je suis preneur
merci d'avance.
-
tyann
Niveau 4: MC (Membre Confirmé)- Messages: 13
- Inscription: 19 Sep 2007, 13:38
- Localisation: REIMS
- Genre:
- Calculatrice(s):→ MyCalcs profile
Re: appel de fonction
Je ne comprends pas la différence entre le PC et la Calto vu que l'interpréteur Lua est le même...
Quelles sont les versions (OS logiciel et Calc) respectives ?
Sinon, avant ta lign qui fait une errer-ur, fait une deep table copy dans une autre variable temporaire, et fait le melange dessus, (toujours dans mel)
Dis moi si ca fait pareil ?
Quelles sont les versions (OS logiciel et Calc) respectives ?
Sinon, avant ta lign qui fait une errer-ur, fait une deep table copy dans une autre variable temporaire, et fait le melange dessus, (toujours dans mel)
Dis moi si ca fait pareil ?
MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)-
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)- Messages: 14623
- Images: 1218
- Inscription: 01 Juin 2007, 00:00
- Localisation: France
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Twitter/X: adriweb
- GitHub: adriweb
Re: appel de fonction
Le PC et la calculatrice ne déclenchent pas du tout les différents événements Lua de la même façon.
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Messages: 41521
- Images: 14821
- Inscription: 25 Oct 2008, 00:00
- Localisation: Montpellier
- Genre:
- Calculatrice(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter/X: critor2000
- GitHub: critor
Re: appel de fonction
Bonjour à tous
J'ai fait quelques essais ce matin avec ta fonction table.copy Adriweb et en fait si je l'emploie avant ma function melange,
c'est ta fonction qui renvoie une erreur 'table null' donc j'en ai conclus que c'est l'origine de la variable qui posait probléme (une liste créée en Basic)
j'ai donc créér une liste pardon ! une table sous Lua et la tout fonctionne correctement sur la calto s'entend (car sur le PC aucun prob)
Voila merci pour ton aide
A propos je parlais dans le dernier message de seconde fois que je trouvais une différence entre Logiciel et machine ,et bien en passant
des limites à platform.window:invalidate() pour limité le redraw ça fonctionne sur la machine mais pas sur le logiciel
Ah oui j'allais oublié c'est la même version pour les 2 : 3.0.2 1791
J'ai fait quelques essais ce matin avec ta fonction table.copy Adriweb et en fait si je l'emploie avant ma function melange,
c'est ta fonction qui renvoie une erreur 'table null' donc j'en ai conclus que c'est l'origine de la variable qui posait probléme (une liste créée en Basic)
j'ai donc créér une liste pardon ! une table sous Lua et la tout fonctionne correctement sur la calto s'entend (car sur le PC aucun prob)
Voila merci pour ton aide
A propos je parlais dans le dernier message de seconde fois que je trouvais une différence entre Logiciel et machine ,et bien en passant
des limites à platform.window:invalidate() pour limité le redraw ça fonctionne sur la machine mais pas sur le logiciel
Ah oui j'allais oublié c'est la même version pour les 2 : 3.0.2 1791
-
tyann
Niveau 4: MC (Membre Confirmé)- Messages: 13
- Inscription: 19 Sep 2007, 13:38
- Localisation: REIMS
- Genre:
- Calculatrice(s):→ MyCalcs profile
Re: appel de fonction
Pour les différences entre la calto et le PC, par exemple le rafraîchissement de l'écran est appelé sur PC dès que la souris bouge ou qu'on appuie sur une touche alors que ce n'est pas le cas sur la calto..
Mes programmes => ici !
-
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)- Messages: 1985
- Images: 8
- Inscription: 02 Aoû 2009, 00:00
- Localisation: 54, près de Metz
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: Ingé Logiciel chez Amazon
Re: appel de fonction
tyann a écrit:A propos je parlais dans le dernier message de seconde fois que je trouvais une différence entre Logiciel et machine ,et bien en passant
des limites à platform.window:invalidate() pour limité le redraw ça fonctionne sur la machine mais pas sur le logiciel
Ah oui quand même
J'ai pas de moyen de vérifier, donc je te crois. Adriweb, tu as moyen de regarder de ton coté ? (qu'on puisse édité/comprendre le problème sur Inspired-Lua).
-
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)- Messages: 6414
- Images: 22
- Inscription: 27 Nov 2008, 00:00
- Localisation: 0x1AACC355
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: BAC+5: Epita (ING3)
Re: appel de fonction
Ba en tout cas j'ai écrit un petit bout de code qui déplaçe un rectangle sur l'écran quand on appuie sur une touche curseur
ensuite j'ai mis en arguments à platform.window:invalidate les nouvelles coordonnées calculées selon qu'on appuie sur fleche haut(y+5),gauche(x-5) etc...
ainsi que les largeur et hauteur du rectangle en me disant que les anciens rectangles devraient restés affichés et quand j'ai lancé le prog sur le logiciel
ça marchait pas on ne voyait toujours que le dernier.
J'ai transférer le prog sur la calto pour voir comment rendaient les couleurs sur la machine et la j'ai vu que les rectangles restaient.
ensuite j'ai mis en arguments à platform.window:invalidate les nouvelles coordonnées calculées selon qu'on appuie sur fleche haut(y+5),gauche(x-5) etc...
ainsi que les largeur et hauteur du rectangle en me disant que les anciens rectangles devraient restés affichés et quand j'ai lancé le prog sur le logiciel
ça marchait pas on ne voyait toujours que le dernier.
J'ai transférer le prog sur la calto pour voir comment rendaient les couleurs sur la machine et la j'ai vu que les rectangles restaient.
-
tyann
Niveau 4: MC (Membre Confirmé)- Messages: 13
- Inscription: 19 Sep 2007, 13:38
- Localisation: REIMS
- Genre:
- Calculatrice(s):→ MyCalcs profile
19 messages
• Page 1 sur 2 • 1, 2
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités