Página 1 de 1
Concatenación de operadores
Publicado: Mar Sep 18, 2007 1:16 pm
por Xavi[1]
oObj1:xData := oObj2:xData := oObjn:xData := xValue
IMHO: Sería bueno disponer de esta faculta en todas las propiedades por coherencia con el lenguaje.
En las que utilizo si no esta implementado las voy cambiando.
CLASS TToolButton FROM XToolButton
PROPERTY lVisible WRITE INLINE Super:lVisible := Value, Value
ENDCLASS
Pero al ver las fuentes creo que sería bueno incorporarlo genéricamente.
CLASS XToolButton FROM TComponent
....
PROPERTY cText INIT "" WRITE INLINE ::SetInfo( Value ), Value
PROPERTY nImage INIT 0 WRITE INLINE ::SetInfo( , Value ), Value
PROPERTY lSeparator INIT .F. WRITE INLINE ::SetInfo( ,, Value ), Value
PROPERTY lAutoSize INIT .F. WRITE INLINE ::SetInfo( ,,, Value ), Value
PROPERTY lGroup INIT .F. WRITE INLINE ::SetInfo( ,,,, Value ), Value
....
PROPERTY lEnabled INIT .T. WRITE INLINE IIf( Value, ::Enable(), ::Disable() ), Value
PROPERTY lVisible INIT .T. WRITE INLINE IIf( Value, ::Show(), ::Hide() ), Value
PROPERTY lChecked INIT .F. WRITE INLINE IIf( Value, ::Check(), ::Uncheck() ), Value
....
Un saludo
Xavi
Concatenación de operadores
Publicado: Mar Sep 18, 2007 2:13 pm
por notengo
xAvi,
> oObj1:xData := oObj2:xData := oObjn:xData := xValue
>
> IMHO: Sería bueno disponer de esta faculta en todas las propiedades por
> coherencia con el lenguaje.
Este es el comportamiento estándar de Clipper/Harbour, a no ser que haya
algún bug en la última revisión de Harbour.
> En las que utilizo si no esta implementado las voy cambiando.
¿ Qué quieres conseguir con este cambio ?
> Pero al ver las fuentes creo que sería bueno incorporarlo genéricamente.
> CLASS XToolButton FROM TComponent
La asignación de la propiedad se hace en el método SetInfo, por lo que no
entiendo para qué quieres poner Value en el stack. Estás "apilando" un
valor que luego no te sirve para nada.
Saludos,
José Lalín
Concatenación de operadores
Publicado: Mar Sep 18, 2007 2:38 pm
por Xavi[1]
José Lalín escribió:
> ¿ Qué quieres conseguir con este cambio ?
Por ejemplo.-
WITH OBJECT ::oTB // Class TToolBar
...
:aItems[2]:lVisible := :aItems[3]:lVisible := FALSE // Class TToolButton
...
END
> La asignación de la propiedad se hace en el método SetInfo, por lo que
> no entiendo para qué quieres poner Value en el stack. Estás "apilando"
> un valor que luego no te sirve para nada.
Lo mismo pero más simple que cambiar hb_ret() en SetInfo
Un saludo
Xavi
Concatenación de operadores
Publicado: Mar Sep 18, 2007 2:56 pm
por notengo
xAvi,
> :aItems[2]:lVisible := :aItems[3]:lVisible := FALSE // Class
Este tipo de asignación está directamente soportada por el compilador, no
hace falta que cambies nada en los fuentes para esto.
> Lo mismo pero más simple que cambiar hb_ret() en SetInfo
Fíjate que SetInfo() asigna mediante XA_ObjSend...() el valor directamente
a la propiedad, por lo que no hace falta devolver con hb_ret().
Saludos,
José Lalín
Concatenación de operadores
Publicado: Mar Sep 18, 2007 4:27 pm
por Xavi[1]
José Lalín escribió:
>
> Este tipo de asignación está directamente soportada por el compilador,
> no hace falta que cambies nada en los fuentes para esto.
Perdona pero para que el copilador haga ese tipo de asignaciones la PROPERTY (DATA) no tendría que estar asociada a ningún
METHOD (Función, CodeBlock) con la clausula WRITE, si es así, es responsabilidad del METHOD el devolver el valor para poder
concatenar operadores. Si devuelve nil o tipos incompatibles provocará error. Basta con que lo pruebes a programar sin mis
cambios para ver el error, al menos con mis versiones de trabajo: Xailer Version 1.75 y xHarbour build 0.99.80 Intl. (SimpLex).
Un cordial saludo
Xavi
Concatenación de operadores
Publicado: Mar Sep 18, 2007 6:54 pm
por jfgimenez
Xavi,
> oObj1:xData := oObj2:xData := oObjn:xData := xValue
>
> IMHO: Sería bueno disponer de esta faculta en todas las propiedades por
> coherencia con el lenguaje.
Tienes razón, y de hecho está así en unos sitios, aunque en otros no. En los
que no está es o bien porque se nos ha pasado, o bien porque afectan a la
velocidad (el simple hecho de copiar un valor a la pila consume algo de
tiempo), y muchas veces es preferible escribir un poquito más de código a
cambio de un mejor rendimiento. No obstante, lo tendremos en cuenta, y donde
consideremos que vale la pena y aún no está puesto lo podremos.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Concatenación de operadores
Publicado: Dom Sep 23, 2007 10:21 pm
por notengo
xAvi,
ahora sí que he entendido lo que querías decir. Con tu primer ejemplo
pensaba que el error aparecía en cualquier concatenación y de ahí mi sorpresa.
Saludos,
José Lalín