﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
934	Hierarchical modularity	Pedro Gea	Víctor de Buen Remiro	"Al intentar crear paquetes y usar una programación modular me encuentro ante una situación que no funciona y no estoy seguro si debería funcionar o no.

La situación surge cuando un submódulo (N2) intenta usar alguna función (F1) definida en su mismo ámbito:

{{{
NameBlock N0A = [[
  Real F1(Real void) { 1 };
  NameBlock N2 = [[
    Real F2(Real void) { F1(?) }
  ]]
]];

// F2 no es capaz de localizar a F1
Real N0A::N2::F2(?);
}}}

Entiendo que este comportamiento puede ser un poco comprometido, pues el comportamiento de los NameBlock's (como espacios de nombres) es el mismo que el de las instancias y de permitirlo podría ocurrir que una instancia de una clase pudiera acceder a miembros de otra instancia que la contiene.

Lo único que me ocurre es crear todo a nivel de submódulos, pero eso no es cómodo en las circunstancias que me encuentro, pero funciona:

{{{
NameBlock N0B = [[
  NameBlock N1 = [[
    Real F1(Real void) { 1 }
  ]];
  NameBlock N2 = [[
    NameBlock N1;
    Real F2(Real void) { N1::F1(?) }
  ]]
]];

// F2 ya es capaz de localizar a F1
Real N0B::N2::F2(?);
}}}

¿Hay alguna forma natural de comunicarle al módulo N2 el acceso a todos los elementos de N0?

También se me ocurre crear el NameBlock como un singletón (ya que la clase se define en N0 y tiene acceso a sus elementos) aunque parece un poco retorcido:

{{{
NameBlock N0C = [[
  Real F1(Real void) { 1 };
  Class @N2 {
    Real F2(Real void) { F1(?) }
  };
  @N2 N2
]];

// F2 es capaz de localizar a F0
Real N0C::N2::F2(?);
}}}

¿No podría declararse de alguna manera que N2 tenga la visibilidad del espacio donde se define?
Quizá usando una palabra clave que se anteponga a la declaración  como ocurre con ""Static"":
{{{
NameBlock N0A = [[
  Real F1(Real void) { 1 };
  Friend NameBlock N2 = [[
    Real F2(Real void) { F1(?) }
  ]]
]];
}}}


"	doubt	closed	highest	OOP Implementation	OOP		blocker	remind		
