Module namespace de base

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Module namespace de base

Message 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.
http://www.purebasicstreet.com/ - Site dédié à purebasic.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Module namespace de base

Message 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()
Dernière modification par comtois le dim. 29/sept./2013 18:32, modifié 1 fois.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Re: Module namespace de base

Message 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...
http://www.purebasicstreet.com/ - Site dédié à purebasic.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Module namespace de base

Message 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.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Re: Module namespace de base

Message 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).
http://www.purebasicstreet.com/ - Site dédié à purebasic.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Module namespace de base

Message 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.
Répondre