Opened 11 years ago
Last modified 11 years ago
#1724 new defect
Error en métodos al construirse una instancia en sus argumentos
Reported by: | Pedro Gea | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | highest | Milestone: | Mantainance |
Component: | OOP | Version: | 3.1 |
Severity: | blocker | Keywords: | |
Cc: |
Description
Se ha encontrado un error inesperado al utilizar un método cuando en uno de sus argumentos se construye (aunque sea de modo auxiliar) una instancia de la misma clase.
Véase, por ejemplo:
Class @TestClass { Text _.name; Real Test(Real void) { NameBlock test = _this; 1} }; @TestClass object1 = [[ Text _.name = "A" ]]; Real object1::Test( Real { @TestClass object2 = [[ Text _.name = "B" ]]; Real 1 } ); // ERROR: [] _this no es un objeto valido para el tipo NameBlock.
Change History (2)
comment:1 Changed 11 years ago by
comment:2 Changed 11 years ago by
Component: | Kernel → OOP |
---|
En general parece desaconsejable pasar como argumento llamadas a funciones o métodos, o cualquier expresión que no sea el nombre de un objeto ya existente.
Note: See
TracTickets for help on using
tickets.
Se he encontrado otro problema de corrupción grave en la POO en TOL que recuerda en cierto modo a éste.
El problema no es fácil de aislar, pero su consecuencia es que un método es llamado sobre una instancia que no le corresponde.
Por ejemplo, en la llamada a un método de una clase A se obtiene una instancia de una clase B y se hace una llamada del tipo:
b::MetodoDeB(MetodoDeA(...))
obteniéndose los errores correspondientes a la llamada:_this::MetodoDeB(MetodoDeA(...))
cuando este métodoMetodoB
ni siquiera existe en la clase A. Parece como si en la evaluación del método de B el_this
local no existiera y usara el inmediatamente superior.