形式的参数fn: => String
表示返回(或是)字符串的“生成器”(函数或值),因此,例如,您可能将方法定义为
def myMethod(fn: => String): String = "Fn output = " + fn
并按如下方式调用它(我在这里使用的返回类型通常可以由编译器推断,我只是出于教学目的添加它们):
def myFn: String = "Hello!"
// Alternatively: def myFn(): String = "Hello!"
// or: val myFn: () => String = "Hello!"
// or most simply: val myString = "Hello!"
val output = myMethod(myFn) // output = "Fn output = Hello!"
在此基础上,我们可以定义一个方法,该方法采用将 String 转换为 Int 的函数,例如:
def my2ndMethod(fn: String => Int): Int = fn("4")
并按如下方式调用它:
def my2ndFn(input: String) = 5 * input.toInt
// Alternatively: val my2ndFn: String => Int = input => 5 * input.toInt
val output2 = my2ndMethod(my2ndFn _) // output2 = 20
在您提供的情况下,您有一个更复杂的实体:返回(或是)一个接受 String 并返回另一个函数的函数,该函数又接受 aRequest[AnyContent]
并且(最终)返回一个 Result(呸!)。
您也可以将其视为采用如下定义和使用的函数:
def authFn(username: String)(request: Request[AnyContent]): Result
val authenticatedResult = IsAuthenticated(authFn _)