José,
Para enviar el mensaje debes "ejecutarlo", es decir, tenés el
nombre del mensaje, o sea el Selector. Entonces para ejecutarlo debes
hacer
objectoX perform: #selector
en tu caso sería:
?>>ordenar: aString (Del modelo)
| message |
message := aString asSymbol.
clientes sortBlock: [ :a :b | (a perform: message) <= (b perform:
message) ].
Como verás en message tenés una expressión del estilo
#nombre.
Como sabrás evaluar en un workspace ObjectoX #nombre te dará un
error
del tipo "Should be selector" o algo asi.
Hay un par de vias para enviar un mensaje teniendo el selector como
string.
1 - La menos prolija para tu codigo es haciendo:
Compiler evaluate: 'objetoX ', message
2 - La otra es convirtiendo el string en symbol y ejecutando el
mensaje en cuestion:
objectoX perform: message asSymbol
Como dijistes que estás apurado para presentar este proyecto
quizás no
le des mucha bola a lo que diga ahora, pero es interesante para que
vayas teniendolo en cuenta para futuros trabajos ;)
- Intentá mantener la semántica del ambiente, es decir, en
inglés los
comentarios y los mensajes. Calculá que tener todo en una misma
semántica es más fácil leer y tu código lo vas a
leer/leeran muchas
veces el día que intentes/intenten mantenerlo/modificarlo.
- La notación es ObjectoX>>mensajeX, con lo cual es prolijo para
el
que lee saber a quien pertenece ese mensaje que estás describiendo.
- Cuando envies, como en este caso para ordenar, selectores por
parametro, es mejor que lo envies como symbol al parametro, pues son
más apropiados. Recordá que 'hola' == 'hola' es falso y en
cambio
#hola == #hola es verdadero.
Saludos,
Hernán.-
--- En smalltalking@..., kikote gregoris
<kikogregoris@y...> escribió:
> Hola amigos
>
> Tengo el siguiente problema : tengo un SortedCollection con
clientes
ordenada por nombre ,
> en la interfase hay un ComboBox con tres items (Nombre, Dni ,
Dirección) y un par de EntryField para mostrar los datos del
cliente .
En le evento select del ComboBox puse un método ordenar , al
seleccionar un items se lo envió a el método "ordenar:aString "
del
modelo el cual realiza lo siguiente.
>
>
> >>ordenar:aString (Del modelo)
>
> |message|
>
> message:=aString asMessage.
> clientes sortBlock:[:a :b | a message <= b message].
>
>
> El problema es que el mensaje "asMessage" transforma a aString en
un
symbol no en un mensaje.
> Esto lo hice para evitar los " if " ya que me paresia una forma mas
elegante de resolver el problema.
> Quisiera saber si alguien sabe que es lo que esta mal
>
> Saludos José
>
>
>
>
>
>
>
> ---------------------------------
> ¿Buscás un auto?
> Encontralo en Yahoo! Autos
> ¡Más de 4000 clasificados todos los días!
> Usados - 0 km - Vendé el tuyo