Utilizando las variables publicas, tienes que asociar la id de un proceso que las utilice a una variable del tipo del proceso en si para que el compilador reconozca el acceso a esa variable publica. El problema viene cuando no conocemos el tipo de proceso que tenemos almacenado en la variable que usamos como ID y , por lo tanto, queremos definirla como un tipo "genérico". Lo he hecho de la siguiente forma y me funciona, pero quiero saber vuestra opinión y si es correcto usarlo:
declare process entidad()
public
int vida;
end
end
process proceso1()
public
int vida=100;
begin
loop
frame;
end;
end;
process proceso2()
public
int vida=90;
begin
loop
frame;
end;
end;
Process main()
private
entidad idProcess;
Begin
idProcess = proceso1();
say(idProcess.vida);
idProcess = proceso2();
say(idProcess.vida);
loop
frame;
end;
End;
La idea es simple, declaramos un proceso ficticio llamado "entidad" que no se va a usar en el codigo pero con las variables publicas definidas. Luego creamos los procesos normales que utilizaran esas variables publicas definiendolas, y, ya podemos crear una variable de tipo "entidad" que contiene la referencia a esas variables publicas con lo que, cuando asociemos esa variable a un proceso cualquiera (de los definidos), podremos acceder a las variables publicas.
¿Puede valer? Funcionar, funciona...
Muy bueno!! muy inteligente, es como usar interfaces!
Interesante :!
Definitivamente, es la forma perfecta para engañar al BGDC :)
----
[size=78%]Aunque en mi caso no me ha funcionado xD[/size]
hace dos dias necesitaba esto... :o
al final lo solucione de otra forma... pero esto es menos lio...
Vaya! Me alegro que pueda ser de utilidad. Veo que no soy el único que busca triquiñuelas para usar algo de herencia/PPO en Bennu ajja.
¿no te ha funcionado Pixel? ¿error de compilación o comportamiento no deseado?
@Warrior: No lo sé, pero probablemente tenga algo que ver con que lo probé rápidamente con un código de unas 20000 lineas apróx xD
Haciendo mas pruebas con este sistema, he detectado un problema que no sé si SplinterGU puede considerar modificarlo para Bennu 2.
El compilador da error de sintaxis si defines como parámetros de una función 2 tipos de proceso distintos. Ejemplo:
function prueba(nave idNave, roca idRoca)
Da error en el segundo parámetro pidiendo una coma entre roca e idRoca. Lo que si permite es esto:
function prueba(nave idNave, idRoca)
pero toma los 2 id como procesos nave, con lo que fallará si no tienen las mismas variables publicas.
¿Es esto un fallo SplinterGU?
No parece un fallo, parece que es como deberia ser.
¿seguro? No digo que el segundo caso deba ser como es, que el segundo parámetro tome el tipo del primero, si no que me debería dejar el primer caso, esto es, definir dos variables de tipo de proceso distintos ¿no?
mmm, no creo, aunque parezca ser el mismo tipo de dato, en realidad estas declarando un tipo de proceso. me parece correcta la validacion
Yo suelo crear variables locales. No se, nunca me había planteado hacerlo así.
y, la verdad es que teniendo variables locales no es tan util, seria verdaderamente util si se pudiese obtener con type(procesogenerico) los ids de todos los procesos que 'heredan' de este. ahi tendria mas sentido
Si, la única ventaja que intentaba buscar con las públicas es que, en términos de memoria, no me resulta eficiente porque se reserva en memoria esas variables públicas para TODOS los procesos que se creen, y , seguro que no todos los procesos usan esas variables.
Buf, las publicas me traen de cabeza, he de empoyarlas a conciencia...
Quote from: warrior_rockk on February 19, 2015, 10:02:26 AM
Haciendo mas pruebas con este sistema, he detectado un problema que no sé si SplinterGU puede considerar modificarlo para Bennu 2.
El compilador da error de sintaxis si defines como parámetros de una función 2 tipos de proceso distintos. Ejemplo:
function prueba(nave idNave, roca idRoca)
Da error en el segundo parámetro pidiendo una coma entre roca e idRoca. Lo que si permite es esto:
function prueba(nave idNave, idRoca)
pero toma los 2 id como procesos nave, con lo que fallará si no tienen las mismas variables publicas.
¿Es esto un fallo SplinterGU?
me perdi esto...
deberia revisarlo, no recuerdo si permite poner parametros tipo proceso en los argumentos.