Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


msgcat, utimer et namespace, trio perdant ?
#1
Hello,

Je vous expose ici un petit souci que je rencontre et qui est particulièrement embêtant: j'ai un script qui contient un namespace et qui utilise msgcat. Enfin, c'est anecdotique, le souci existe même avec une variable simple. utimer semble faire perdre le namespace:

Code qui fonctionne sans souci (la variable est immédiatement interprétée):

tcl
namespace eval ns1 {
   variable m1 "toto le héros"
   list [utimer 5 {putlog "$::ns1::m1"}]
}
# [13:31] toto le héros


Code qui ne fonctionne pas:

tcl
namespace eval ns1 {
   variable m1 "toto le héros"
   list [utimer 5 {putlog "[set [namespace current]::m1]"}]
}
# [13:32] Tcl error in script for 'timer28':
# [13:32] can't read "::::m1": no such variable

Et du coup le souci existe aussi avec msgcat qui stocke les phrases dans un catalogue propre au namespace, la phrase n'est pas retrouvée.

Je suis preneur de toute idée pour ne plus subir ce souci (j'ai quelques idées, je dois les tester).
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
  Reply
#2
Petite auto-réponse (en fait de SpiKe^^) pour aider ceux qui auraient le souci.
Ma syntaxe pour le timer n'était pas la meilleure:

tcl
utimer 5 [list putlog "[set [namespace current]::m1]"]

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
  Reply
#3
La raison est que tu utilise {} tout ce qui est entre est évaluer par TCL au déclenchement de utimer, et non dans le namespace actuel de ton code.
Le utimer étant lancer dans son namepsace, celui ci n'ai pas exécuté a l'emplacement dans ton code mais dans son propre environnement ( namspace :: et non ::ns1)

Tandis que dans la méthode SpiKe^^ le putlog contient déjà le contenu du m1 en utilisant le namespace là ou tu le place dans le code.


tcl
<@ZarTek>· .tcl set ::a "mavaleuractuel"; list [utimer 5 "putserv \"PRIVMSG #chan: [set ::a]\""]; set ::a "valeur_apres_lancement_utimer";
<BOT> OK - 0.089 ms
<@BOT>  mavaleuractuel
<@ZarTek>· .tcl set ::a "mavaleuractuel"; list [utimer 5 {putserv "PRIVMSG #chan: [set ::a]"}]; set ::a "valeur_apres_lancement_utimer";
<@BOT> OK - 0.063 ms
<@BOT>  valeur_apres_lancement_utimer


Cela peut être intéressant si tu as besoin de la valeur de ::a lors de la déclaration ou lors de l'exécution de utimer.

Perso j'utilise le list dans utimer comme ceci:

tcl
<@ZarTek>· .tcl set ::a "mavaleuractuel"; utimer 5 [list putserv "PRIVMSG #chan: [set ::a]"]; set ::a "valeur_apres_lancement_utimer";
<@BOT> OK - 0.087 ms
<@BOT>  mavaleuractuel

Retrouvez les dernières modifications de mes scripts TCL (versions Alpha/Bêta) ainsi que d'autres de mes réalisations sur ma page GitHub et les versions stables dans la section scripts de ce site  8-)
  Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Résolu] Mettre un utimer sur isidentified Amand 9 233 28/02/2022, 11:46
Last Post: Amand
  [Demande] Appel d'une variable dun namespace à un autre ? aliasangelius 2 2,918 16/01/2017, 15:00
Last Post: aliasangelius
  [Résolu] msgcat, soucis de format. aliasangelius 2 3,696 28/06/2014, 18:18
Last Post: BaGrift
  Probleme namespace, variable, proc ZarTek 3 4,408 03/08/2013, 21:10
Last Post: CrazyCat
  Déclarer $nick dans msgcat. aliasangelius 5 4,950 04/09/2012, 16:27
Last Post: CrazyCat
  Bug bizarre : Namespace, array et socket CrazyCat 3 4,400 23/02/2012, 18:12
Last Post: djkenny
  msgcat aliasangelius 5 4,369 09/10/2011, 11:56
Last Post: aliasangelius
  Utimer mein 5 2,659 28/05/2010, 23:57
Last Post: mein
  Pb d'import/export avec les namespace mika23 5 4,400 03/02/2010, 10:48
Last Post: mika23

Forum Jump:


Users browsing this thread: 1 Guest(s)