2012-08-08 1 views
1

나는 다음과 마찬가지로 play2 코드가 있습니다와 마찬가지로 play2 컨트롤러/뷰와 함께 스칼라 암시 적 변환 + 매개 변수

implicit def contextToRequest(rc: RequestContext[_]) = rc.request 
    implicit def contextToFlash(rc: RequestContext[_]) = rc.request.flash 
    implicit def contextToSession(rc: RequestContext[_]) = rc.request.session 

    def login: Action[AnyContent] = PublicAction { implicit rc => 
    Ok(html.login(loginForm)) 
    } 

RequestContext는 마찬가지로 play2 Request 내 자신의 사용자 정의 클래스 래퍼입니다.

내 스칼라보기로 시작

@(form: Form[(String,String,Boolean)])(implicit flash: Flash, session: Session,rc: utils.RequestContext[_]) 

그러나 컴파일러는 말한다 :

매개 변수 플래시에 대한 암시 적 가치를 찾을 수 없습니다 : play.api.mvc.Flash

을 누군가가 왜 작동하지 않는지 설명 할 수 있습니까? 아마도 암시 적 매개 변수에 암시 적 변환을 사용할 수 없습니까?

그런 다음 누군가가 내게 Play2 요청에서 Session/Flash로 암시 적 변환이 이루어지고있는 이유를 설명 할 수 있습니까?

답변

1
플래시/세션에 요청의 암시 적 convertion을 제공하기 때문에 모호함이있을 것이기 때문에 나는이 다른 방법을 필요로하지 않습니다

여러 개의 암시 적 매개 변수가있는 경우 일부 매개 변수는 다른 매개 변수의 멤버 속성이므로 디자인에 이상이 있습니다. 당신은 당신의 방법을 내부에 가지고 싶은 사실

class B 
class C 

class A { 
    val b:B = _ 
    val c:C = _ 

} 

def myMethod(someData:String)(implicit a:A, b:B, c:C) { 

} 

는 B와 같은 서명 그러나 그 A의 C 회원, 하나는 아무것도 주어진 A와 A B와 C를 제공 할 수 있습니다 A. 올바른 서명은 다음과 같습니다.

def myMethod(someData:String)(implicit a:A) { 
    // trick to import members variable 
    import a._ 
    println(b) 
    println(c) 
    } 
+0

내 래퍼에 필요한 모든 데이터 –

0

은 흠 그것으로 잘 작동 것 같다

implicit def contextToRequest(implicit rc: RequestContext[_]) = rc.request 

와 마찬가지로 play2 이미