是构造函数重载吗?

时间:2017-10-12 10:51:59

标签: scala

我在Scala遇到奇怪的代码片段时很新:

class EndpointMapper[A](m: Method, e: Endpoint[A]) extends Endpoint[A] { self =>

  /**
   * Maps this endpoint to either `A => Output[B]` or `A => Future[Output[B]]`.
   */
  final def apply(mapper: Mapper[A]): Endpoint[mapper.Out] = mapper(self)

  final def apply(input: Input): Endpoint.Result[A] =
    if (input.request.method == m) e(input)
    else EndpointResult.Skipped

  final override def toString: String = s"${ m.toString.toUpperCase } /${ e.toString }"
}

这是一个类,所以我可以创建它的一个实例。 那个apply方法怎么样?

我可以像调用EndpointMapper(mapper)方法的函数一样使用apply吗?

如何区分两个应用程序或编译器如何知道,apply应该调用哪个?

1 个答案:

答案 0 :(得分:2)

您无法调用EndPointWrapper(mapper) - 因为必须在随播对象而不是类上定义apply。您可以做的是致电epw(mapper),其中epwEndPointWrapper的实例。

  

如何区分两个应用程序或编译器如何知道,如果他调用哪个适用?

它根据参数的类型知道调用哪个版本的apply,就像使用任何其他重载方法一样。

相关问题