![]() |
Les Namespaces - Version imprimable +- Communauté Eggdrop (https://forum.eggdrop.fr) +-- Forum : Eggdrop et scripts (https://forum.eggdrop.fr/forumdisplay.php?fid=8) +--- Forum : F.A.Q. (https://forum.eggdrop.fr/forumdisplay.php?fid=9) +--- Sujet : Les Namespaces (/showthread.php?tid=72) |
Les Namespaces - CrazyCat - 04/07/2007 Sir_Fz a écrit :Written by BarkerJr. Source: http://barkerjr.net/irc/eggdrop/Scripting/namespaces.Why namespaces? If you've ever had issues with global variables or procedures in your script conflicting with other scripts, you need namespaces. Namespaces are the closest that Tcl gets to object oriented programming. They allow the programmer to place variables and procedures inside one neat named-package in Tcl so as not to conflict with anything in the global namespace. Lets Begin! Code : namespace eval MyScript { Code : catch MyScript::uninstall Code : set ns "MyScript" All Done! ----------------------------------------------------------------------------------------------------- Edit: Replaced [set] commands with [variable] inside namespace after reading user's tip. RE: [A traduire] les Namespaces - MenzAgitat - 19/09/2007 Sir_Fz a écrit :Ecrit par BarkerJr. Source: http://barkerjr.net/irc/eggdrop/Scripting/namespaces.Pourquoi utiliser des namespaces ? Si vous avez déjà eu des problèmes avec des variables globales ou des procédures dans votre script interférant avec d'autres scripts, vous avez besoin des namespaces. Les namespaces représentent ce qui rapproche le plus le Tcl de la programmation orientée objet. Ils permettent au programmeur de placer des variables et des procédures dans un sous-environnement clairement délimité et avec un nom distinct, de façon à ne pas créer de conflits avec quoi que ce soit d'autre dans le namespace global. Commençons. Code : namespace eval MyScript { Notez que le bind spécifie le nom complet pour la procédure. Notez également que la variable $response réside à l'intérieur du namespace. Cela signifie qu'il ne s'agit pas d'une variable globale. Donc à l'intérieur de la procédure, elle est déclarée comme variable plutôt que comme global. Notez que les variables doivent être déclarées sur des lignes séparées si vous en utilisez plusieurs. Elles ne peuvent pas être déclarées en une seule longue ligne comme les globals. Code : catch MyScript::uninstall Si l'utilisateur a toujours le script dans le .conf, il sera automatiquement chargé après le rehash. Avant tout, les binds ne sont pas directement associés au namespace donc ils doivent être unbind séparément. Enfin, le namespace lui-même peut être supprimé. N'oubliez pas d'arrêter tous les timers que vous pourriez avoir dans votre script. De plus, dans le but de désinstaller/réinstaller également pour les utilisateurs qui ont chargé le script au moyen de la commande .tcl source, ajoutez la 1ère ligne ( catch blablabla... ) pour appeler la procédure de désinstallation. Le catch est là afin que le bot ne plante pas si la procédure de désinstallation n'existe pas encore (premier lancement). Code : set ns "MyScript" Premièrement, définissez le namespace dans une variable globale. Ceci n'est utilisé que dans les deux premières lignes, donc on peut ensuite unset la variable globale de manière à ne pas encombrer le namespace global. Après cela, [namespace current] doit être utilisé partout où MyScript était utilisé. Cela rend pratiquement impossible l'occurrence d'un conflit entre votre script et un autre. Et voilà ! ----------------------------------------------------------------------------------------------------- Edit: remplacé les commandes [set] par [variable] à l'intérieur du namespace après avoir lu les notes des lecteurs. RE: [A traduire] les Namespaces - CrazyCat - 19/09/2007 Merci bien, je n'ai le temps de rien en ce moment, voila qui m'avance bien ![]() Je relirais ça et je le mettrais en ligne très vite. RE: Les Namespaces - CrazyCat - 20/11/2007 Traduction en ligne ici |