? Acabo de encontrarlo in the API y me gustaría ver uno o dos ejemplos junto con una explicación de lo que es bueno.¿Cómo utilizo el rasgo scala.Proxy
Respuesta
El rasgo aproximación proporciona una base útil para la creación de delegados, pero tenga en cuenta que sólo proporciona implementaciones de los métodos en Any
(equals
, hashCode
y toString
). Tendrá que implementar cualquier método de envío adicional usted mismo. Proxy se utiliza a menudo con el pimp-my-library pattern:
class RichFoo(val self: Foo) extends Proxy {
def newMethod = "do something cool"
}
object RichFoo {
def apply(foo: Foo) = new RichFoo(foo)
implicit def foo2richFoo(foo: Foo): RichFoo = RichFoo(foo)
implicit def richFoo2foo(richFoo: RichFoo): Foo = richFoo.self
}
La librería estándar también contiene un conjunto de rasgos que son útiles para la creación de proxies de recogida (SeqProxy
, SetProxy
, MapProxy
, etc).
Finalmente, hay un plugin de compilador en la scala-incubator (AutoProxy plugin) que implementará automáticamente métodos de reenvío. Vea también this question.
Parece que lo usarías cuando necesitas la funcionalidad newtype
de Haskell.
Por ejemplo, el siguiente código Haskell:
newtype Natural = MakeNatural Integer
deriving (Eq, Show)
puede corresponder aproximadamente al siguiente código Scala:
case class Natural(value: Int) extends Proxy {
def self = value
}
¿Entonces esto es básicamente maquinaria para crear delegados? –
@JensSchauder, sí. – missingfaktor
- 1. ¿cómo utilizo un UIPageControl?
- 2. Rasgo, FunciónN o Rasgo-heredando-FunciónN en Scala?
- 3. ¿Cuál es el rasgo Comparable de Scala?
- 4. rasgo Monad en Scala
- 5. ¿Cómo mezclar un rasgo con una instancia?
- 6. ¿El rasgo se extiende (A => B) una función de extensión de rasgo?
- 7. ¿Cómo utilizo el espacio en lugar de TAB en NSTextView
- 8. Excel - ¿Cómo utilizo una columna para "etiquetas" para filtrar el
- 9. ¿Cómo utilizo el parámetro Rails remote: true con JSON?
- 10. ¿Cómo utilizo el argumento firstLine en cada línea
- 11. ¿Cómo utilizo varias fuentes con el complemento jQuery fullCalendar?
- 12. ¿Cómo utilizo todos los núcleos para nmake?
- 13. Java - ¿Cómo utilizo un archivo de clase?
- 14. ¿Cómo utilizo directorio globbing en JDK7
- 15. ¿Qué significa instanciar un rasgo?
- 16. mixin o rasgo en F #
- 17. Extendiendo un rasgo y tipos
- 18. ¿Qué es un rasgo sellado?
- 19. lo que es más Scala idiomática: rasgo TraitA extiende TraitB o rasgo TraitA {auto: TraitB =>}
- 20. ¿Utilizo el localizador o el control remoto de Phing?
- 21. Composición con el mismo rasgo, pero diferentes parámetros de tipo
- 22. error "Una plantilla contiene un rasgo de clase debe terminar con un rasgo de clase"
- 23. ¿Cuál es la diferencia entre un "rasgo" y un "rasgo de plantilla"?
- 24. ¿Por qué la opción no extiende el rasgo Iterable directamente?
- 25. Soporte de biblioteca para el rasgo NotNull de Scala
- 26. Scala println no funciona con el rasgo de aplicación
- 27. ¿De dónde viene el rasgo de la palabra?
- 28. Rasgo anidado en el constructor de clase en scala
- 29. ¿Cómo se define un rasgo de paquete * privado * en Scala?
- 30. Cómo escribir el mejor rasgo is_callable posible para el operador con plantilla()
La versión activa de ese complemento es autoproxy-lite: https://github.com/kevinwright/Autoproxy-Lite –