Es un hecho bien conocido que los tipos estructurales se implementan a través de la reflexión. ¿Hay quizás otros constructos de lenguaje que usen la reflexión?¿Qué funciones de Scala se implementan internamente utilizando la reflexión?
Respuesta
Esto está estrechamente relacionado con los tipos estructurales, pero cualquier instancia de objeto anónima, es decir
new { def print = ("hello world") }.print
utilizará la reflexión.
http://scala-programming-language.1934581.n4.nabble.com/Structural-types-reflection-td3071599.html
+1: Esto tiene implicaciones al definir conversiones implícitas, por lo que vale la pena señalarlo por separado. En resumen, siempre defina una clase * nombrada * fuera de la función 'implícita', y defina una función implícita * separada * para convertirla a esa clase. –
Esto es exactamente lo que hago cuando defino una conversión implícita para agregar un método a una clase - hora para cambiar. – Russell
Si se tiene en cuenta isInstanceOf/asInstanceOf como la reflexión, a continuación, la coincidencia de patrones se basa en ellos
No es una construcción del lenguaje, pero ScalaTest incluye Suite.execute
, que utiliza la reflexión para encontrar y llamar a los métodos de prueba.
¿El modelo pattern matching de Scala utiliza alguna reflexión detrás de escena?
Afaik, la coincidencia de patrones usa solo métodos de comprobación de tipo, tipo de fundición y "de aplicación". Para las clases de biblioteca estándar, el compilador también puede generar conmutadores JVM nativos, construcciones 'if-else' y demás. La reflexión no es necesaria aquí. – vadipp
_¿Qué es el tipo de verificación, realmente? – matanster
Método de invocación en los tipos estructurales depende de la reflexión:
type T = { def startsWith(x:String):Boolean }
def doSomethingWith(x:T) = x.startsWith("abc")
doSomethingWith("abcdef")
OP mencionó específicamente tipos estructurales y solicitó otros ejemplos. –
@pelotom: aviso OP también es Ken Bloom. – IttayD
@IttayD: ¿Eh? OP es @Nermin Serifovic –
enumeraciones utilizar la reflexión para averiguar acerca de todos los valores posibles para la enumeración de la función nameOf
. (Consulte el método populateNameMap
en Enumeration.scala). Esto se hace una vez, la primera vez que llama al nameOf
para un tipo particular de Enumeration
.
El intérprete Scala hace un uso muy intensivo de reflexión.
- 1. Cómo se implementan las funciones de la biblioteca en Haskell
- 2. Funciones variadas de Scala y Seq
- 3. ¿Cómo se define (?) Internamente?
- 4. ¿Cómo se implementan las tablas hash internamente en los idiomas populares?
- 5. Obtener métodos de clase utilizando la reflexión
- 6. Scala: problemas utilizando funciones como objetos de primera clase
- 7. ¿Qué capacidades de reflexión podemos esperar de Scala 2.10?
- 8. ¿Cómo se implementa la referencia internamente?
- 9. Comportamiento extraño con la reflexión en Scala
- 10. Crear delegado genérico utilizando la reflexión
- 11. ¿Qué significa ampersand entre funciones en Scala
- 12. Descubriendo tipos derivados utilizando la reflexión
- 13. Obtiene el tipo utilizando la reflexión
- 14. ¿Qué es la reflexión?
- 15. ¿Cómo llamo a un método de Objeto Scala utilizando la reflexión?
- 16. utilizando la reflexión para encontrar desaprobación
- 17. ¿Cómo se implementa malloc() internamente?
- 18. ¿Cómo se implementan los bloques try/catch?
- 19. Inyectar diferentes clases que implementan la misma interfaz utilizando Ninject
- 20. ¿Por qué se implementan AsObservable y AsEnumerable de forma diferente?
- 21. Funciones protegidas en Scala
- 22. ¿Qué problemas resuelve la reflexión?
- 23. Funciones de elevación en scala
- 24. Reflexión sobre una clase caso Scala
- 25. Java: crear instancias de una enumeración utilizando la reflexión
- 26. ¿Puedo crear una nueva función utilizando la reflexión en Go?
- 27. Scala: funciones normales vs funciones agrupadas?
- 28. Cómo verificar qué parámetros de la clase de caso tienen valor predeterminado utilizando scala reflection 2.10
- 29. Obtener propiedades en orden de declaración utilizando la reflexión
- 30. Funciones vs métodos en Scala
¡Gracias a todos por sus respuestas! No estoy seguro de qué hacer en este punto. No sería justo aceptar uno solo en este caso, pero tampoco es posible aceptar varios de ellos. –
acepta el que se refiere a los objetos anónimos porque es el único (aparte de los tipos estructurales en general) donde la reflexión puede provocar graves problemas de rendimiento. (Tal vez soy solo yo, pero no puedo dejar una de mis preguntas sin una respuesta aceptada). –