Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Cambiar Algo Que Gambas Hace Por Defecto Al Ejecutar Una Instrucción
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Cambiar Algo Que Gambas Hace Por Defecto Al Ejecutar Una Instrucción 
 
Buenas!.

Cuando ejecutamos.

print objeto
 


Nos suele mostrar:

Citar:

(Clase dirección de memoria)


Me gustaría cambiar ese comportamiento. Mi idea es que en vez de hacer eso, me muestre lo que yo le diga.
Quiero que convierta el objeto a una cadena.

En Python existe el método especial __str__()
En Java existe el método ToString()

Si el método _str_ no se sobrescribe en Python ocurre algo parecido a Gambas.
( Mostraría clase y referencia en memoria ).

En Java es algo parecido a su manera.

En gambas tengo la opción de usar el método especial _call que actúa como una función
y devuelve un valor.  Sobrescribiría el método _call,  pero entonces, tengo que llamarlo como una función.

print objeto()
 


Naturalmente también podría crear en gambas el método ToString...pero estaría en la misma situación.
objeto.método().

¿ Hay alguna posibilidad de cambiar ese comportamiento ?.

Tenemos la clase Object con el método call, todavía más larga la instrucción.

Object.Call(objeto, "método").

Referencias:

Aprende a utilizar el método toString() en Java

Método especial __str__ en Python

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Sabado, 21 Marzo 2020, 12:15; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cambiar Algo Que Gambas Hace Por Defecto Al Ejecutar Una Instrucción 
 
Shell escribió:  
Mi idea es que en vez de hacer eso, me muestre lo que yo le diga.
Quiero que convierta el objeto a una cadena.

No entiendo lo que quieres.    
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cambiar Algo Que Gambas Hace Por Defecto Al Ejecutar Una Instrucción 
 
Vuott:

Citar:

No entiendo lo que quieres.


Pues que si hago:

Public Sub Main()
  
  Dim b1, b2 As Bombilla
      
  b1 = New Bombilla
    
  b1.encender
    
  ' Para usar el método call se tiene que usar como una función
  'Print ("b1: " & b1())
    
  Print b1() 'Esto es lo que no quiero hacer
  Print b1  ' Esto es lo que quiero hacer

End
 


Y en vez de mostrarme:

Citar:

(Bombilla 0x55dff4bc0f18)


Me muestre esto:

Citar:

encendida


Para ello he tenido que sobrescribir el método especial _call del código de la clase bombilla.

Public Sub _call() As String
  
  Dim est As String
  
  If estado() Then
    est = "encendida"
  Else
    est = "apagada"
  Endif
  
  Return est
  
End
 


No quiero llamarlo como a una función o método.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cambiar Algo Que Gambas Hace Por Defecto Al Ejecutar Una Instrucción 
 
Perdona, puedes dejar la metáfora y dar un ejemplo práctico y real?
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cambiar Algo Que Gambas Hace Por Defecto Al Ejecutar Una Instrucción 
 
Vuott:

Citar:

Perdona, puedes dejar la metáfora y dar un ejemplo práctico y real?


¿ Qué no entendiste del ejemplo anterior ?. Es un "ejercicio real", solo que es para el lenguaje Java.  
Quiero conseguir (si es posible) hacer algo en gambas de (la misma forma) que en Java o Python.  

...
Print b1() 'Esta es la forma o manera que no quiero hacerlo para conseguir el resultado
Print b1 ' Esta es la forma que quiero hacerlo para conseguir el resultado
 


Puedo mostrarte el ejercicio resuelto en Java:

Clase Bombilla.

public class Bombilla {

    private boolean interruptor;
    public static boolean integeneral = true;

    public Bombilla() {
        interruptor = false;
    }

    public boolean getestado() {
        return interruptor;
    }

    public void encender() {
        interruptor = true;
    }

    public void apagar() {
        interruptor = false;
    }

    public boolean estado() {
        boolean est = false;
        if (integeneral == true && interruptor == true) {
            est = true;
        } else {
            est = false;
        }
        return est;
    }

    public String toString() {
        String estado;

        if (estado() == true) {
            estado = "encendida";
        } else {
            estado = "apagada";
        }
        return estado;
    }
}
 


Código que usa la clase Bombilla.

public class PruebaBombilla {
  
    public static void main(String[] args) {
       Bombilla b1, b2;
      
       b1 = new Bombilla();
       b2 = new Bombilla();
      
       b1.encender();
       b2.apagar();
      
       System.out.println("b1: " + b1);
       System.out.println("b2: " + b2);
      
       Bombilla.integeneral = false;
       System.out.println("\nCortamos la luz general");
       System.out.println("b1: " + b1);
       System.out.println("b2: " + b2);
      
       Bombilla.integeneral = true;
       System.out.println("\nActivamos el interruptor general");
       System.out.println("b1: " + b1);
       System.out.println("b2: " + b2);
    }
    
}
 


Salida:

Citar:

b1: encendida
b2: apagada

Cortamos la luz general
b1: apagada
b2: apagada

Activamos el interruptor general
b1: encendida
b2: apagada


Busco la forma en gambas de que al imprimir el objeto bombilla, ya sea b1 o b2,  no me muestre una dirección de memoria del objeto.
Como eso es el procedimiento habitual de gambas, tengo que buscar una forma alternativa. Pero gambas usa en este caso
esta forma:

print b1()
 


En este caso, el método _call de gambas entraría en funcionamiento y "mostraría" lo que quiero, pero "no"
de la misma forma que hace en "Java".  Quiero averiguar si es posible hacerlo de la misma forma que en Java.

Tan solo es eso.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 2 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario