2012-06-25 14 views
9

Tengo una aplicaciónScala Play 2, que pasa a petición con el método

TestController.scala

def foo(p1: String) = Action {implicit request => 
    Ok(bar(p1)) 
} 

private def bar(p1: String) = { 
//access request parameter here 
} 

Play 2.0 ¿Hay una manera de utilizar implicit pasar request a bar

Respuesta

16

Sí, se puede:

def foo(p1: String) = Action { implicit request => 
    Ok(bar(p1)) 
    } 

    private def bar(p1: String)(implicit req: RequestHeader) = "content" 

El código:

Action { implicit request 

llama a este método en el objeto de la acción:

def apply(block: Request[AnyContent] => Result): Action[AnyContent] = { 

lo tanto, lo que se llama "solicitud" coincide con el parámetro de nombre "bloque". Aquí lo "implícito" es opcional: hace que el valor de "solicitud" esté disponible como un parámetro implícito para otras llamadas al método/función.

Lo implícito en su función de "barra" dice que puede tomar el valor de "req" a partir de un valor implícito, y no necesariamente debe pasarse explícitamente.

+0

Gracias Adam, eso funciona. Pregunta de seguimiento, ¿la necesidad implícita se debe pasar como un parámetro al curry? – Bob

+1

En scala, es el parámetro _list_, no el parámetro, que está implícito. No estoy seguro de la motivación para eso. –

+1

Scala> val implícita i = 1 i: Int = 1 Scala> val implícito s = "hi" s: java.lang.String = hi Scala> def concat (x implícitos: Int, Y: String) = x + y concat: (implícito x: Int, implícito y: Cadena) Cadena scala> concat res0: Cadena = 1hi –

Cuestiones relacionadas