Opened 15 years ago
Closed 15 years ago
#780 closed defect (fixed)
Classes and homonymes methods
Reported by: | 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 )
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(?)
Attachments (1)
Change History (7)
Changed 15 years ago by
Attachment: | ticket_14.HomonymMethods.tol added |
---|
comment:1 Changed 15 years ago by
Status: | new → accepted |
---|
comment:2 Changed 15 years ago by
Description: | modified (diff) |
---|
comment:3 Changed 15 years ago by
Es curioso que si la concatenación de las llamadas empieza desde un NameBlock esto no pasa:
NameBlock ea = [[ NameAge ]]; Text ea::NameAge("Victor",40)::name_; // Funciona correctamente
No sé si esta "limitación" se puede considerar un error y no sé si ya hay subido un ticket al respecto.
Pero creo que sería muy conveniente solucionarlo.
Pues en algunos casos puede ser bastante práctico.
comment:4 Changed 15 years ago by
Cuando este Warning de concatenar llamadas con :: ocurre dentro de clases
(cosa que no siempre ocurre) puede solucionarse anteponiendo el _this.
Sin embargo en el ámbito global no hay algo parecido al _this ése.
comment:5 Changed 15 years ago by
De acuerdo en que puede ser conveniente arreglarlo, pero eso no impide que sea muy complicado hacerlo. Ya lo he intentado otras veces sin éxito.
Por otra parte es trivial vadear el problema, se interpone una variable auxiliar y ya está. Por este motivo ese problema tiene la mínima prioridad.
La parte primera del problema aún la estoy investigando pero desde luego tiene mucha más importancia.
comment:6 Changed 15 years ago by
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
El error del tipo
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