3

複雑な引数の型を持つIsAuthenticatedメソッドがあります (play2 の zentasks の例からコピーしました):

def IsAuthenticated(f: => String => Request[AnyContent] => Result): Action[(Action[AnyContent], AnyContent)] =
  Security.Authenticated(username, onUnauthorized) { userId =>
    Action { implicit request =>
      val email = request.session("user.email")
      f(email)(request)
    }
  }

それを使用するために、私の行動は次のとおりです。

def delete(id:String) = IsAuthenticated { email => request =>
   ...
}

email使用する必要がない場合は、イベントを宣言する必要があることがわかります。代わりに使用できます_

def delete(id:String) = IsAuthenticated { _ => _ =>
   ...
}

しかし_ => _ =>、まだ退屈です。

メソッドをリファクタリングして使用法を簡単にする方法は? emailたとえば、 andが必要ない場合はrequest、次のことができます。

def delete(id:String) = IsAuthenticated {
   ...
}

が必要な場合はrequest、次のことができます。

def delete(id:String) = IsAuthenticated { request =>
   ...
}

が必要な場合はemail、それらすべてを宣言します。

def delete(id:String) = IsAuthenticated { email => request =>
   ...
}
4

1 に答える 1

4

をオーバーロードしIsAuthenticatedて、必要なさまざまなフレーバーを提供できます。例えば:

def IsAuthenticated(result: => Result) = IsAuthenticated { _ => _ => result }

その後、次のように使用できます。

def delete(id:String) = IsAuthenticated {
   ...
}
于 2012-04-10T09:43:49.157 に答える