Open lspigariol opened 7 years ago
Por lo que veo, es consistente en cuanto a que toma el tipo resultante de acuerdo al receptor del mensaje ya que opera convirtiendo al parámetro al tipo propio, siempre que sea posible.
On Tue, Aug 8, 2017 at 2:53 PM, Lucas Spigariol notifications@github.com wrote:
Es al menos extraño el comportamiento del metodo + "pin" + "ocho" "pinocho"
"ben" + 10 "ben10"
10 + "ben" error
10 + 8 18
calculo que que para el TS tambien es un problema...
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/uqbar-project/wollok/issues/1202, or mute the thread https://github.com/notifications/unsubscribe-auth/AJ-EZpSEX_vVLyF4fsk8mkkFPBAh9TA7ks5sWKCegaJpZM4OxE3n .
Los casos con el mismo tipo están claros. La pregunta es qué hacer en los casos con tipos mixtos.
Si bien es cierto que siendo objetos podría ser "esperable" que el comportamiento depende del receptor, dado que la semántica habitual que se le da al símolo "+" asume la propiedad conmutativa, creo que sería más prolijo y más intuitivo para el usuario que el comportamiento de los objetos del lenguaje al recibir el mensaje "+" respete esta propiedad.
Por otro lado, ¡la "suma" de strings (=concatenación) de Strings no es una operación conmutativa! Es decir, nadie esperaría que "hola" + "mundo" == "mundo" + "hola". Así que tenemos que ser cuidadosos en la definición.
Dadas estas condiciones, podríamos pensar que la estrategia más sencilla para llegar a algo relativamente consistente es que la operación con tipos mixtos termine siempre en error.
Lo voy a marcar como discusión para que definamos el comportamiento esperado. Entiendo que una vez definido eso la implementación es sencilla.
Tambien recordemos otros casos del +
Concatena colecciones (Set y Bag) y devuelve colección del tipo del receptor. En los strings, se le puede pasar como argumento no solo un nro, sino un booleano, un wko y cualquier cosa, que lo convierte en string y concatena. El + entre Enteros y Reales, convierte a Reales, independientemente de quien sea el receptor
Por otra parte, para hacer que 1 + "hola" sea "1hola", se lo puede trampear fácil haciendo "" + 1 + "hola"
Pensando en soluciones, otra alternativa es que Que en las operaciones mixtas entre numeros (y otros literales) y strings siempre convierta a String.
Pero también me preguntaba... ¿cual es el sentido que sea polimorfico el +? ¿Es un quilombo de compatibilidad implementar un ++ para concatenar? Se me ocurre que dejar el + solo para números simplifica el TS
Yo siempre tuve en el tintero implementar string interpolartion. Todo lenguaje "moderno" las tiene y suelen ser bastante mas practicas que concatenar. No soluciona el problema, pero reduce usos
Creo que estamos ante un conflicto cultural. En la mayoria de los lenguajes los strings se concatenan con el + entonces nos parece "natural" ( y es comodo que sea un simbolo). Pero no tiene nada que ver con la suma numerica, como explicó nico
Asi que, suena medio raro peor tal vez con interpolations y un simbolo distinto para el "concat" creo que seria concrptualmente mas asertado. Incluso esa concatenacion podria si ser compartida entre strings y listas. Ya que en ambas pasa eso de la no conmutabilidad
"Hola" :: "mundo" ?
Seria bueno pensarlo anticipando como seria un destructuring de listas (o pattern matching, como quieran)
const [ local :: visitante ] = partido
No es necesario obvio, pero bueno.
El El jue, 10 de ago. de 2017 a las 19:56, Lucas Spigariol < notifications@github.com> escribió:
Tambien recordemos otros casos del +
Concatena colecciones (Set y Bag) y devuelve colección del tipo del receptor. En los strings, se le puede pasar como argumento no solo un nro, sino un booleano, un wko y cualquier cosa, que lo convierte en string y concatena. El + entre Enteros y Reales, convierte a Reales, independientemente de quien sea el receptor
Por otra parte, para hacer que 1 + "hola" sea "1hola", se lo puede trampear fácil haciendo "" + 1 + "hola"
Pensando en soluciones, otra alternativa es que Que en las operaciones mixtas entre numeros (y otros literales) y strings siempre convierta a String.
Pero también me preguntaba... ¿cual es el sentido que sea polimorfico el +? ¿Es un quilombo de compatibilidad implementar un ++ para concatenar? Se me ocurre que dejar el + solo para números simplifica el TS
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/uqbar-project/wollok/issues/1202#issuecomment-321695276, or mute the thread https://github.com/notifications/unsubscribe-auth/AEORWDEPKj1cI6KIDZ1u3879kgd32c64ks5sW4qagaJpZM4OxE3n .
Es al menos extraño el comportamiento del metodo + "pin" + "ocho" "pinocho"
"ben" + 10 "ben10"
10 + "ben" error
10 + 8 18
calculo que que para el TS tambien es un problema...