2012-06-25 56 views
9

我有一个Play 2.0应用斯卡拉播放2,传递请求方法

TestController.scala

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

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

是否有使用implicit的方式来传递requestbar

回答

16

是的,您可以:

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

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

代码:

Action { implicit request 

呼叫Action对象上此方法:

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

所以,你叫什么 “要求” 匹配命名为 “块” 的paramater。这里的“隐式”是可选的:它使“请求”值作为其他方法/函数调用的隐含参数可用。

隐含在你的“bar”函数中,它表示它可以从一个隐式值中取得“req”的值,并且不一定需要明确传入。

+0

感谢亚当,这工作。后续问题,隐式需要作为curried参数传递吗? – Bob

+1

在scala中,它是隐式的参数_list_,而不是参数。我不确定这样做的动机。 –

+1

阶>隐式VAL I = 1 I:INT = 1 阶>隐式VAL S = “喜” S:java.lang.String中=喜 阶> DEF的concat(隐式X的:int,Y:字符串)= x + yconcat :(隐式x:Int,隐式y:字符串)字符串 scala> concat res0:String = 1hi –