close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 15 years ago

Last modified 15 years ago

#780 closed defect

Classes and homonymes methods — at Version 2

Reported by: pgea@… Owned by: Víctor de Buen Remiro
Priority: highest Milestone: OOP Implementation
Component: OOP Version: 2.0.1
Severity: blocker Keywords:
Cc:

Description (last modified by Víctor de Buen Remiro)

Ocurren cosas inesperadas cuando hay llamadas entre clases anidadas.
Parece ser que algunas llamadas (las más últimas) pueden tomar como suyos métodos de otras anteriores.

Creo que el ejemplo es bastante ilustrativo.

He encontrado otros errores (que aún no he aislado) que pueden
que tengan mucho que ver con esto. Ocurren al concatenar métodos
de clases anidadas. Por ejemplo, si en lugar de crear un método que me diera el nombre de un elemento de la clase, hago una llamada del tipo:

GetElement(?)::GetName(?)

Change History (3)

Changed 15 years ago by pgea@…

comment:1 Changed 15 years ago by Víctor de Buen Remiro

Status: newaccepted

comment:2 Changed 15 years ago by Víctor de Buen Remiro

Description: modified (diff)

El error del tipo

GetElement(?)::GetName(?)

no tiene nada que ver con los errores anteriores, ni siquiera tiene que ver con las clases. Es una limitación que existe desde siempre en el parser y que se debe al orden de precedencia del operador ::. He aquí un ejemplo para reproducirlo sin uasr clases

Set NameAge(Text name, Real age)
{[[
   Text name_ = name,
   Real age_ = age
]]};
//Esto funciona perfectamente
Set str = NameAge("Victor",40);
Text str::name_;
//Esto da un warning y no hace nada
Text (NameAge("Victor",40))::name_;
Note: See TracTickets for help on using tickets.