2012-06-25 90 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 –