我希望能够将一个函数传递给一个类,以便该函数始终返回一个布尔值,但参数的数量可以是可变的。
这实际上是我现在正在使用的:
/**
* Template class for any SecureSocial SecuredAction.
*/
class SomeAction[T](
isSuccessful: (SecuredRequest[AnyContent], T) => Boolean,
success: Result,
failure: Result) extends SecureSocial {
def toReturn = SecuredAction(WithProvider("google")) {
implicit request => if (isSuccessful(request)) success else failure
}
}
我希望isSuccessful
参数是一个函数,它至少接受一个类型的参数SecuredRequest[AnyContent]
和一个零个或多个参数。有时我会传入一个只需要request
对象的函数,有时我会传入一个需要request
对象和一些其他参数的函数。
看到这个答案后,我查看了 currying,这是将多参数函数转换为单参数函数的做法,如果需要更多参数,它将返回一个函数。这听起来可以解决我的问题,但是在阅读了部分应用函数和 currying 之间的区别之后,我开始认为不是?看起来仍然有一定数量的最终论点......
我想成功的咖喱会是这样的:
class SomeAction[T](
isSuccessful : ((SecuredRequest[AnyContent])(T) => Boolean) , // ERROR
... ) ... { ... }
这绝对不是正确的语法。
或者
class SomeAction[T](
isSuccessful : (SecuredRequest[AnyContent] => Boolean) ,
... ) ... { ... }
做一些事情isSuccessful
来toReturn
取消传递的函数。
可能导致我回答的多个问题:
- 是否有一些特殊的语法来描述我不知道的柯里化函数?
- 或者我有一个类型
(SecuredRequest[AnyContent] => Boolean)
函数,但是在调用时做一些 uncurryingisSuccessful(request)
?
谢谢阅读; 我想我只是在寻找简单的例子。