2011-06-18 11 views

Respuesta

18

El problema es que + está sobrecargado para concatenar String a cadenas. Por lo tanto, siempre que utilice el método + en un tipo que no lo tenga, recibirá un mensaje de error que no está relacionado con el problema real: que el tipo que tiene no es el que esperaba.

Hay +: y :+ para reemplazarlo.

20

Ampliando la respuesta de Daniel, + es también un mal operador para usar en la inserción de colecciones. Matemáticamente, el operador + tiene un significado muy convencional, y parte de ese significado es una garantía de asociatividad. Desafortunadamente, la asociatividad es una garantía que no tiene ningún sentido cuando agrega un Int a un Vector[Int]. Como tal, + siempre fue un operador muy confuso para cualquiera que tuviera algún entrenamiento algebraico.

+: y :+ son superiores en varios sentidos, uno de los cuales es que no hay expectativa de asociatividad. De hecho, la propia asimetría de los operadores implica no -asociabilidad, que es precisamente su semántica. También +: y :+ se reflejan entre sí muy bien, y +: es asociativo de la derecha, todo lo cual conspira para proporcionar una API muy natural para la recopilación antes y después, respectivamente.

Cuestiones relacionadas