我在github上的this代码中发现了一个奇怪的类型:
final class StaticRouteB[Page, O](private val f: (=> Action[Page]) => O) extends AnyVal {
def ~>(a: => Action[Page]): O = f(a)
}
f
的类型。这是什么意思 ?我的猜测是它是一个带名字参数调用的函数。从来没有见过它,所以我不确定它是什么或这是如何工作的。
有没有办法将此类型转换为更“标准”的内容? (我的意思是上面的代码,所以它不使用(=> Action[Page]) => O)
类型?这种类型只是一些语法糖吗?)
我特别想知道,如果我在创建Action[Page] => O
时将f
作为StaticRouteB
传递会怎样?我会收到编译错误吗?运行时错误?为什么?我的意思是,(=> ... )
的目的是什么?如果没有传递正确类型的函数或更改f
参数的评估策略,是否会产生编译错误?我的意思是为什么有人想要这样的类型?出于何种目的?
答案 0 :(得分:7)
(=> Action[Page])
是" 按名称调用"参数。
所以f: (=> Action[Page]) => O
是一个带有Action [Page]类型的名称调用参数的函数,该函数返回类型为O的结果。
您可以在方法~>
定义中查看其用法。