#947 closed enhancement (fixed)
Investigar la posibilidad de crear miembros locales de instancia aparte de los heredados.
| Reported by: | Víctor de Buen Remiro | Owned by: | Víctor de Buen Remiro |
|---|---|---|---|
| Priority: | highest | Milestone: | OOP Implementation |
| Component: | Kernel | Version: | |
| Severity: | blocker | Keywords: | |
| Cc: | Pedro Gea |
Description
A veces puede ser interesante que una instancia cree sus propios métodos además de los de las clases a las que pertenece.
En general se puede resolver creando una clase heredada que tenga esos métodos y de la que se cree la instancia pero si se sabe que sólo va a haber una instancia es mucho más cómodo hacerlo directamente en ésta y no se saca ninguna ventaja del mecanismo de clases.
Habría que investigar si es posible hacer este cambio de forma qe no afecte al rendimiento en el resto de ocasiones.
Change History (6)
comment:1 Changed 15 years ago by
| Cc: | Pedro Gea added |
|---|---|
| Status: | new → accepted |
comment:2 Changed 15 years ago by
comment:4 Changed 15 years ago by
comment:5 Changed 15 years ago by
| Resolution: | → fixed |
|---|---|
| Status: | accepted → closed |

Ahora mismo sí es posible crear funciones miembro de una instancia pero no funcionan como métodos pues no pueden acceder a los demás miembros y métodos de la clase ni a los de la instancia. Por ejemplo el siguiente código TOL
Class @A { Real _.value; Real getValue(Real unused) { _.value } }; @A a = [[ Real _.value = 1; Real _.otherValue = 3; Real getOtherValue(Real unused) { _.otherValue }; Real getDoubleValue(Real unused) { 2*_.value } ]]; Real v1 = a::getValue(?); Real v2 = a::getOtherValue(?); Real v3 = a::getDoubleValue(?);devuelve estos mensajes de error
ERROR: [1] _.otherValue no es un objeto valido para el tipo Real. [Call stack] [1] Real a::getOtherValue (Real unused) ERROR: [2] Fallo en la función "getOtherValue" [Call stack] [1] Real a::getOtherValue (Real unused) Warning: [1] La función :: ha fallado en : a::getOtherValue(?) ERROR: [3] v2 no se pudo crear. ERROR: [4] _.value no es un objeto valido para el tipo Real. [Call stack] [1] Real a::getDoubleValue (Real unused) ERROR: [5] Argumentos erróneos para Real * x1 * x2 {Real x1, Real x2} [Call stack] [1] Real a::getDoubleValue (Real unused) ERROR: [6] Fallo en la función "getDoubleValue" [Call stack] [1] Real a::getDoubleValue (Real unused) Warning: [2] La función :: ha fallado en : a::getDoubleValue(?) ERROR: [7] v3 no se pudo crear.