Tôi hiểu rằng một phương pháp có thể có mã như thế này:Mũi tên chất béo nhiều, liên tiếp trong các tham số phương thức có ý nghĩa gì trong Scala?
def m(p1:Int => Int) ...
Có nghĩa là phương pháp này có một chức năng p1 mà trả về một Int
Nhưng khi duyệt Play! đang khuôn khổ tôi tìm thấy một đặc điểm với các phương pháp không thể đọc:
trait Secured {
def username(request: RequestHeader) = request.session.get(Security.username)
def onUnauthorized(request: RequestHeader) = Results.Redirect(routes.Auth.login)
def withAuth(f: => String => Request[AnyContent] => Result) = {
Security.Authenticated(username, onUnauthorized) { user =>
Action(request => f(user)(request))
}
}
/**
* This method shows how you could wrap the withAuth method to also fetch your user
* You will need to implement UserDAO.findOneByUsername
*/
def withUser(f: User => Request[AnyContent] => Result) = withAuth { username => implicit request =>
UserDAO.findOneByUsername(username).map { user =>
f(user)(request)
}.getOrElse(onUnauthorized(request))
}
}
nào f: User => Request[AnyContent] => Result
nghĩa là gì? Thoạt nhìn, nó trông giống như một phương thức trả về một hàm r
của kiểu Yêu cầu; r
sau đó trả về một Result
.
Đây có phải là giả định đúng không?
Ok, mát mẻ. Nhưng tại sao điều này cần phải được xác định? Tại sao trình biên dịch không thể suy ra kiểu 'Request' trả về? Chỉnh sửa: nevermind, tôi giả sử các kiểu con của Yêu cầu có thể trả về các loại Kết quả khác nhau, vì vậy điều này hữu ích. –
@ CameronA.Ellis Tôi không chắc chắn tôi hiểu nhận xét của bạn. Đối tượng 'Request' không trả về bất cứ thứ gì. Hàm trả về bởi 'f', có kiểu' Request [AnyContent] => Result' trả về 'Result'. Kiểu trả về không thể bị loại ra khỏi một kiểu hàm bởi vì sau đó nó sẽ giống như 'f' trả về một đối tượng' Request' - không phải là một hàm nhận một đối tượng 'Request', mà hoàn toàn khác. – sepp2k
cảm ơn vì đã làm rõ điều đó. Làm cho toàn bộ ý nghĩa bây giờ. –