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 :oops:). 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.