私は次の方法を持っています
def show[E: Writes, T: Writes](block: RequestWithUser[AnyContent] => Either[E, T]): Action[AnyContent] = {
withErr(block)
}
コントローラーから次のように使用します。
def show(id: Long) = CrudAuthAction.show { request =>
IdeaType.findByIdWithErr(id)
}
また、リクエスト メソッドをオプションにしたいので、同じメソッドに別の署名を定義しました。
def show[E: Writes, T: Writes](block: => Either[E, T]): Action[AnyContent] = {
withErr(request => block)
}
そしてそれはうまくいきます、私はリクエストパラメータを省略できます
しかし、この他の方法で同じことをしようとすると
def list[T: Writes](block: RequestWithUser[AnyContent] => T): Action[AnyContent] = {
fromRequest(block)
}
def list[T: Writes](block: => T): Action[AnyContent] = {
fromRequest(request => block)
}
こんな感じで使いたいとき。
def list = CrudAuthAction.list { request =>
IdeaType.find(request.queryString)
}
リクエストにパラメータータイプが欠落していることがわかるので、次のように指定する必要があります。
def list = CrudAuthAction.list { request: RequestWithUser[AnyContent] =>
最初のケースと何が違うのかわかりませんが、scala は適切なタイプのリクエストを推測できないようです...
私が目にする唯一の違いは、最初のケースではブロックが [E, T] を返しているのに対し、2 番目のケースではジェネリック T だけを返していることです...