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