parameter name method generic def conversion annotation programming-languages scala implicits

programming-languages - name - scala implicit conversion types



Otros lenguajes de programación compatibles con “a la Scala” (6)

Aunque no es tan poderoso como Scala implica que C ++ ya tenía operadores de conversión y constructores de copia que podrían conducir a conversiones de tipo implícitas. En combinación con la capacidad de definir operadores binarios (algo que Scala no permite), esto entregó parte del poder de los implícitos de Scala.

Las implicaciones de Scala son muy poderosas. Tengo curiosidad si son una característica nueva / única de Scala, o el concepto ya existía en otros lenguajes de programación.

Gracias.

EDITAR :

Para aclarar mi pregunta, sí, estoy hablando de esta implementación concreta. Tener "cosas implícitas" por todas partes parecía extraño al principio, pero después de haberlo usado por un tiempo y ver cómo lo usan los demás, me impresiona lo bien que funciona.


Depende de la amplitud con la que desee estirar la frase "admite implícitos". Una de las razones convincentes para las implicaciones en Scala es esencialmente agregar métodos a una clase existente (a la que no tiene acceso). Esto es posible en otros idiomas a través de diferentes construcciones: por ejemplo, Smalltalk, Ruby y Objective-C, todos admiten métodos de adición a las clases que no controlas.


Hubo un artículo realmente bueno en Princples of Programming Lanages (POPL) en 2000, que introdujo parámetros implícitos . Han sido implementados en Haskell. Estoy seguro de que Martin Odersky, el diseñador de Scala, estaba al tanto de este trabajo. (Martin es un participante frecuente y bienvenido en POPL).




Si entiendo las implicaciones correctamente de http://patricklogan.blogspot.com/2007/06/scala-implicits.html entonces sí, hay varios idiomas que lo admiten.

Los mejores ejemplos son los métodos de extensión C #. Un ejemplo reciente donde los usé:

A menudo tuve que hacer cálculos de distancia entre dos Point s. Un Point no tiene un método para calcular la distancia a otro punto, así que agregué el siguiente código a mi proyecto:

class MyPointExtension { public static Double GetDistance(this Point p1, Point p2) { return /* the pythagoras code */ } }

Entonces podría hacer:

Point unitPosition = new Point(x,y); Point target = new Point(x2,y2); Double distance = unitPosition.GetDistance(target);