Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Récupération des fonctions dans un librairie (lua)
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Récupération des fonctions dans un librairie (lua)

Posté le 05/08/2014 09:20

Dans le cadre de l'adaptation avec Cartix de certaines fonctions de Touchlib (de Dark Storm) en lua, je voudrais récupérer les fonctions à l'intérieur du fichier.

Pour voir coment cela marche, j'ai utilisé le module math :
misc.modload("module math") -- j'appelle le module dans mon programme


Mais c'est à ce moment où je ne sais pas comment appeler les fonctions de la librairie dans mon programme

Quelqu'un peut-il m'aider ?


Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

Citer : Posté le 05/08/2014 10:39 | #


Alors :
doc de vebveb a écrit :
Exemple 1: Je veux charger une librairie et je ne souhaite pas la décharger.

f,err = misc.modload ( nom)
if f == nil -- si il y a erreur, f = nil
then
print(err) -- err contient le message d'erreur
end -- affiche l'erreur lors du chargement du fichier
f() -- execute le fichier (et donc défini les fonctions et les variables globales qui deviennent accessibles)

Remarque: f correspond en fait à une fonction qui contien tout le code du module. L'executer
revient à lancer le programme contenu dans le module.
Exemple 2: Je veux charger un module, mais je n'ai pas confiance dans le contenu: j'aimerais qu'il
ne puisse pas voir les variables globales que j'ai défini et qu'il ne puisse pas les modifier.
OU : Je veux charger le module et pouvoir le supprimer de la mémoire entièrement ensuite.

f,err = misc.modload ( nom )
if f == nil -- si il y a erreur, f = nil
then
print(err) -- err contient le message d'erreur
end -- affiche l'erreur lors du chargement du fichier
tab = {base = base ; misc = misc ; nbdraw = nbdraw ; graydraw = graydraw}
base.setfenv(f, tab) – tab est maintenant l'environnement de f (contient toutes les variables
globales)
f()

Toutes les variables globales de f seront définies dans tab. ( on y accède avec ' tab. ' )


Donc, ta manière de charger la lib n'est pas bonne (il manque un f() pour que ça fonctionne )
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 05/08/2014 12:10 | #


donc en gros si je ne veux pas avoir d'erreur je fais :

f= misc.modload("module math)
f()


Mais comment j’exécute une seule fonction à l'intérieur de f() ?

je met f(cos (0.1)) ?

Ajouté le 05/08/2014 à 13:49 :
J'ai essayé :
f=misc.modload("module math") -- tout est normal
cos=f(cos(0.1)) -- je ne suis pas sûr et ça me met une erreur
misc.print(cos)
misc.wait(100)


Je pige absolument rien
In Arch, I trust ! And you ?
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

Citer : Posté le 05/08/2014 14:05 | #


alors quand tu fait f(), si j'ai bien compris, il exécute tout le fichier du module. Il définit donc les fonctions du module il te suffit donc, après avoir mit f() d'appeller ta fonction (ici cos(0.1) ) comme si tu l'avais définie dans ton fichier.
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 05/08/2014 14:06 | #


ah d'accord j'essai

EDIT:
f =misc.modload(module math)
f()
misc.print(cos(0.1)
misc.wait(100)


ça me met une erreur
In Arch, I trust ! And you ?
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

Citer : Posté le 05/08/2014 15:02 | #


hum... ça ne serait pas par hasard parce que tu as oublié une parenthèse fermante à la troisième ligne ?
Plus sérieusement, à quelle ligne ça plante ?
Et tu ferais mieux de mettre le code de vebveb qui permet de prévenir d'éventuelles erreurs dans l'ouverture...
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 05/08/2014 15:06 | #


ouai c'est une erreur d'écriture mais ça plante à f()
In Arch, I trust ! And you ?
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

Citer : Posté le 05/08/2014 15:08 | #


Et ça met quoi comme erreur ?
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 05/08/2014 15:12 | #


attemp to call global "f" (a nil value)
Mais dans le dossier du Lua FX, un exemple utilise que les modules donc je vais m'en inspirer
In Arch, I trust ! And you ?
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

Citer : Posté le 05/08/2014 15:14 | #


Donc f() vaut nil !
et
VebVeb a écrit :
-- si il y a erreur, f = nil

Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 05/08/2014 15:14 | #


Pour charger le module math
local math_is_loaded
local function load_math()
if math_is_loaded then return
else
local math_module, err;
math_module, err = modload ( "math" )
if math_module == nil -- si il y a erreur
  then
   error("we need the math module. Error message is:\n\r"..err,0) -- err contient le message d'erreur
  end
math_module() -- define global functions pow, sin, cos, tan, atan, asin, acos
math_is_loaded = true
end
end




Ajouté le 05/08/2014 à 15:14 :
ouai je vais prendre le truc à Veb

Ajouté le 05/08/2014 à 15:15 :
Je vais compléter mon tuto là dessus, je pense que cela sera plus clair pour les autres
In Arch, I trust ! And you ?
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 05/08/2014 18:06 | #


Je tiens quand même à preciser que c'est pas vraiment l'adaptation de la lib de D_S
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 06/08/2014 09:35 | #


Les fonctions sont bien mais il y a quelques erreurs dans la lib, Cartix mais je t’enverrai un MP
EDIT : @Cartix : J'ai modifié le début du sujet

In Arch, I trust ! And you ?
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 06/08/2014 16:40 | #


Ok, j'attend ton mp.
Et c'est pas non plus l'adaptation de certaine fonction, je n'ai regardé TouchLib qu'àprès avoir écrit mes fonctions (mais tu peux laisser le topic comme ça, je dis ça juste pour que tout soit clair)
Vebveb Hors ligne Membre Points: 791 Défis: 14 Message

Citer : Posté le 09/08/2014 11:28 | #


Je pensais que fournir un exemple d'utilisation était mieux qu'une documentation très longue.

Visiblement il faudra que je fasse les deux la prochaine fois
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 13/08/2014 17:06 | #


Faut il que je crée un topic pour officialiser la lib ?
In Arch, I trust ! And you ?

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 52 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd