Esta es una pregunta acerca de las continuaciones de Scala. ¿Se puede anidar resets
? Si pueden: ¿para qué están anidados resets
? ¿Hay algún ejemplo de resets
anidado?Ejemplo de reinicios anidados en Scala
Respuesta
Sí, reset
s se pueden anidar, y, sí, puede ser útil. Como ejemplo, recientemente prototipé una API para el scalagwt project que permitiría a los desarrolladores de GWT escribir RPC asíncronas (llamadas a procedimientos remotos) en un estilo directo (a diferencia del estilo de retrollamada que se utiliza en GWT para Java). Por ejemplo:
field1 = "starting up..." // 1
field2 = "starting up..." // 2
async { // (reset)
val x = service.someAsyncMethod() // 3 (shift)
field1 = x // 5
async { // (reset)
val y = service.anotherAsyncMethod() // 6 (shift)
field2 = y // 8
}
field2 = "waiting..." // 7
}
field1 = "waiting..." // 4
Los comentarios indican el orden de ejecución. Aquí, el método async
realiza un reset
, y cada llamada de servicio realiza un shift
(puede ver la implementación en my github fork, específicamente Async.scala).
Observe cómo el async
anidado cambia el flujo de control. Sin él, la línea field2 = "waiting"
no se ejecutará hasta después de la finalización exitosa del segundo RPC.
Cuando se realiza una llamada RPC, la aplicación captura la continuación hasta el más interior async
límite, y suspende para su ejecución al término de la RPC. Por lo tanto, el bloque anidado async
permite que el control fluya inmediatamente a la línea tan pronto como se realice el segundo RPC. Sin ese bloque anidado, por otro lado, la continuación se extendería hasta el final del bloque externo async
, en cuyo caso todo el código dentro de async
externo bloquearía en todos y cada uno de los RPC.
reset
forma una abstracción para que el código externo no se vea afectado por el hecho de que el código interno se implementa con la magia de continuación. Entonces, si está escribiendo código con reinicio y desplazamiento, puede llamar a otro código que puede o no implementarse con reinicio y cambio también. En este sentido, se pueden anidar.
- 1. anidados Lista de anotaciones en Scala
- 2. Ejemplo de Comonad en Scala
- 3. Scala - modificando elementos anidados en xml
- 4. Scala por ejemplo?
- 5. ¿Hay algún ejemplo de juegos en Scala?
- 6. capistrano reinicios secuenciales
- 7. Contravalor de Scala: ejemplo de vida real
- 8. Replicación continua permanente con CouchDB en reinicios
- 9. Preservar el estado de la aplicación en reinicios
- 10. Mantenimiento del modo "luces apagadas" (View.setSystemUiVisibility) en reinicios
- 11. Ejemplo de cliente-servidor con los actores de Scala
- 12. Buen diseño: subprocesos de trabajo y reinicios de actividades
- 13. NoSQL (por ejemplo, MongoDB) o RDMS (por ejemplo, PostgreSQL) para el nuevo proyecto de Scala?
- 14. Tratamiento del protocolo URL sin reinicios de la aplicación
- 15. NameSpaces anidados en C++
- 16. persistente problema inclusión de documentos anidados anidados
- 17. Mantenimiento de sesiones entre Jboss AS 7 reinicios/implementaciones
- 18. Uso de ranuras anidados (#)
- 19. Comentarios anidados en C++
- 20. Tipos anidados en clojure?
- 21. bucles anidados en MySQL
- 22. Comentarios anidados en XML?
- 23. Styling elementos anidados en WPF
- 24. Manejo de elementos anidados en JAXB
- 25. Hilos Anidados?
- 26. UINavigationControllers anidados
- 27. código de error en el código de ejemplo de "Beginning Scala"
- 28. ejemplo de uso de scala.collection.immutable.Set de java
- 29. Desencadenadores de UpdatePanel anidados
- 30. Un ejemplo de procesamiento xml pero usando anti-xml en lugar de Scala xml