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


Pb d'import/export avec les namespace
#1
Bonjour,

J'essayes de me mettre aux namespace et je rencontre une difficulté pour importer des commandes d'un autre namespace.

Voici le script qui contient les commandes à exporter:


tcl
namespace eval sqlcmd {
	package provide sqlcmd
	namespace export sqlconnect sqlclose 
	proc sqlconnect { db } {
		return [mysqlconnect -socket $sqlcmd::connect(sock) -user $sqlcmd::connect(user) -password $sqlcmd::connect(pass) -db $sqlcmd::connect($db)]
	}
	proc sqlclose { handle } {
		mysqlendquery $handle
		mysqlclose $handle
	}
}


Et voici le tcl dans lequel j'essayes d'importer les commandes


tcl
package require sqlcmd
namespace eval monscript {
	namespace import sqlcmd::sqlconnect sqlcmd::sqlclose
	set handle [sqlconnect test]
putlog $handle
	sqlclose
}


Losque que je démarre le bot, j'ai ce message d'erreur :

Code:
[10:18] unknown namespace in import pattern "sqlcmd::sqlconnect"
    while executing
"namespace import sqlcmd::sqlconnect"
    (in namespace eval "::myscript" script line 7)
#2
Lorsque tu es dans un namespace et que tu veux adresser un autre namespace extérieur, tu dois spécifier le chemin absolu et non relatif.

La commande suivante va chercher un namespace du nom de sqlcmd dans ton namespace monscript, ce qui explique pourquoi il ne le trouve pas :
tcl
namespace import sqlcmd::sqlconnect

La syntaxe correcte est :
tcl
namespace import ::sqlcmd::sqlconnect

Vois les :: comme des / dans un chemin de répertoires, ça fonctionne pareil.
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#3
J'avais déjà fait le rapprochement des :: avec les / des répertoires, mais dans ma tête l'import/export se faisait au niveau du namespace global et non dans le namespace ou la commande est appelée donc bêtement je n'avais pas mis les :: et cette notion de namespace étant nouvelle pour moi je n'ai pas encore appréhendé entièrement la chose, par contre j'en ai bien cerné l'intérêt :)

Merci :)
#4
Encore une petite question avec les namespace,

Lors de l'utilisation des variable déclarée dans le namespace, comme ceci par exemple :


tcl
namespace eval monscript {
   variable test "un test"
   bind pub - !test monscript::test
 
   proc test { nick host handle chan args } {
     putserv "privmsg $chan :$monscript::test"
   }
}


Je dois impérativement appeler la variable en préfixant son nom avec le namespace ou y'a-t-il un moyen de l'appeler sans le préfixe étant donné qu'elle est utilisée à l'intérieur de son namespace ?
#5
soit tu l'appelles par $monscript::test, soit tu mets une ligne variable test au début de chaque procédure qui utilise la variable afin de l'importer et de pouvoir l'appeler $test ensuite :


tcl
namespace eval monscript {
   variable test "un test"
   bind pub - !test monscript::test
 
   proc test { nick host handle chan args } {
     putserv "privmsg $chan :$monscript::test"
   }
}

ou
tcl
namespace eval monscript {
   variable test "un test"
   bind pub - !test monscript::test
 
   proc test { nick host handle chan args } {
     variable test
     putserv "privmsg $chan :$test"
   }
}

Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#6
Ok je n'avais pas compris que l'on pouvait utiliser "variable" exactement comme la fonction "global"


Possibly Related Threads…
Thread Author Replies Views Last Post
  msgcat, utimer et namespace, trio perdant ? CrazyCat 2 76 12/04/2022, 23:40
Last Post: ZarTek
  [Demande] Appel d'une variable dun namespace à un autre ? aliasangelius 2 2,845 16/01/2017, 15:00
Last Post: aliasangelius
  Probleme namespace, variable, proc ZarTek 3 4,314 03/08/2013, 21:10
Last Post: CrazyCat
  Bug bizarre : Namespace, array et socket CrazyCat 3 4,319 23/02/2012, 18:12
Last Post: djkenny
  NS import/export aliasangelius 2 3,359 03/06/2011, 09:59
Last Post: aliasangelius

Forum Jump:


Users browsing this thread: 1 Guest(s)