Page 1 sur 1
Module namespace de base
Publié : dim. 29/sept./2013 1:54
par stombretrooper
Bonjour à tous,
juste une petite question, impossible de trouver la réponse dans la doc ou sur les forums (j'ai cherché, sûrement avec les mauvais mots clés

). Dans tout les cas, ma question est simple, comment marche les modules vis à vis du namespace de base...
Comment faire ce genre de code ;
Code : Tout sélectionner
Procedure test()
Debug "ok"
EndProcedure
DeclareModule mon_test
Declare bigtest()
EndDeclareModule
Module mon_test
Procedure bigtest()
test();La procedure test n'existe pas dans le module, comment faire pour l'appeler ?
EndProcedure
EndModule
mon_test::bigtest()
(Je ne compte pas faire ce genre de chose, c'est juste pour faire un exemple le plus court possible).
Je trouve sa étrange, de pouvoir utiliser des procédures, structure, constantes, variables faites dans d'autre module en faisant un UseModule, ou en utilisant le "nom_module::" MAIS de ne pas pouvoir utiliser le namespace par défaut, pourtant j'ai bien l'impression qu'il est impossible d'utiliser une variable, structure, procedures déclaré hors d'un module dans un module...
Merci d'avance pour vos réponses.
Re: Module namespace de base
Publié : dim. 29/sept./2013 8:36
par comtois
ça me parait curieux de vouloir appeler une fonction du programme dans un module. Pour qu'un module soit réutilisable, il me semble qu'il devrait être indépendant du programme qui l'utilise. Je vois les modules comme une bibliothèque.
Si tu tiens vraiment à le faire, tu peux essayer comme ça :
Code : Tout sélectionner
Runtime Procedure Somme(a, b)
Debug a+b
EndProcedure
DeclareModule mon_test
Declare bigtest()
EndDeclareModule
Module mon_test
Prototype Somme(a, b)
Procedure bigtest()
a.Somme = GetRuntimeInteger("Somme()")
a(12, 7)
EndProcedure
EndModule
mon_test::bigtest()
Re: Module namespace de base
Publié : dim. 29/sept./2013 11:41
par stombretrooper
J'utilise les modules plus comme des "thèmes" d'un gros projet. Sauf que le gros projet à des variables/structures que je veux utiliser dans un des modules, et je me retrouve bloqué, finalement, c'est idiot, mais la solution serait de placer ces structures/variable dans un module, toujours accessible dans le namespace de base, et je pourrais les utiliser dans le module que je veux...
Mais je trouve ça quand même étrange qu'on ne puisse pas accéder au namespace de base, donc je me demandais si il y avait pas une solution que je ne connaissais pas...
Re: Module namespace de base
Publié : dim. 29/sept./2013 13:21
par comtois
stombretrooper a écrit :Mais je trouve ça quand même étrange qu'on ne puisse pas accéder au namespace de base, donc je me demandais si il y avait pas une solution que je ne connaissais pas...
extrait de la doc
Les éléments du code principal, comme les procédures, les variables, etc, ne seront pas accessibles à l'intérieur du module, même s'ils sont déclarés en global.
Re: Module namespace de base
Publié : dim. 29/sept./2013 16:09
par stombretrooper
Autant pour moi. Merci comtois. Désolé de te faire perdre du temps pour un truc qui est dans la doc, j'avais pas vue le passage (enfin du moins, j'ai la version anglaise de la doc, je l'avais pas compris comme ça).
Re: Module namespace de base
Publié : lun. 30/sept./2013 10:26
par Mesa
Je ne sais pas si ça peut t'aider mais toujours dans la doc
Pour partager des informations entre les modules, un module commun peut être créé et utilisé par tous les modules qui en ont besoin. C'est la façon normale pour disposer de données globales disponibles pour tous les modules.
Autrement dit, le code principal peut utiliser un module, un module peut utiliser un module mais un module ne peut pas utiliser du code principal.
(Je vais peut-être l'ajouter dans la doc...)
Code : Tout sélectionner
;Exemple: Avec un module commun
; Le module commun, qui sera utilisé par d'autres modules afin de partager des données
; ------------------------------------------------------------------------------------
DeclareModule Voitures
Global NbVoitures = 0
EndDeclareModule
Module Voitures
EndModule
; Premier module de voiture
;--------------------------
DeclareModule Ferrari
EndDeclareModule
Module Ferrari
UseModule Voitures
NbVoitures+1
EndModule
; Second module de voiture
; ------------------------
DeclareModule Porche
EndDeclareModule
Module Porche
UseModule Voitures
NbVoitures+1
EndModule
; Code principal
; --------------------------------------------------------------------------------------------------
Debug Voitures::NbVoitures
Avec les interfaces on peut récupérer l'adresse d'une procédure
http://www.purebasic.fr/french/viewtopi ... =1&t=13947
mais à ma connaissance, personne n'a encore mélangé interfaces et modules. Ça peut peut-être marcher (?)
Ça pourrait devenir aussi un enfer de débogage !
Mesa.