首页 文章

scala类型的目的(=> A)=> O.

提问于
浏览
4

我在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 回答

  • 7

    (=> Action[Page]) 是“按名称调用”参数 .

    所以 f: (=> Action[Page]) => O 是一个带有Action [Page]类型的名称调用参数的函数,该函数返回类型为O的结果 .

    您可以在方法 ~> 定义中查看其用法 .

相关问题