繁体   English   中英

applyOrElse Scala中缺少参数类型

[英]Missing parameter type in applyOrElse Scala

我有这段代码试图调用部分函数。 构建项目时,出现错误,指出missing parameter type ++ headerExtractor.applyOrElse(event, _ => Map.empty)

我看过其他帖子,但我觉得这应该有用。 我究竟做错了什么?

我在这里叫headerExtractor

private def publishToProfileExchange(customer: Schema.Customer, event: Schema.CustomerEvent): Future[Done] = {
  val messageType: String = "ProfileEvent"
  val headers: Map[String, AnyRef] = Map(
    "profileId" -> customer.id.toString,
    "eventType" -> event.eventType,
    "type" -> messageType
  ) ++ headerExtractor.applyOrElse(event, _ => Map.empty)

  ...
  //valid return values would be here
}

private val headerExtractor: PartialFunction[Schema.CustomerEvent, Map[String, AnyRef]] = {
    case x if x.eventType.equalsIgnoreCase("message") && (x.eventData \ "incoming").asOpt[Boolean].getOrElse(false) =>
       Map("incomingMessage" -> "true")
}

您必须在.applyOrElse()上提供参数类型 见下面的例子

case class CustomerEvent(eventType: String, eventData: String)

val headerExtractor = new PartialFunction[CustomerEvent, Map[String, AnyRef]] {
  def apply(x: CustomerEvent): Map[String, AnyRef] = Map("incomingMessage" -> "true")
  def isDefinedAt(x: CustomerEvent): Boolean = x.eventType.equalsIgnoreCase("message")
}

assert(headerExtractor.applyOrElse(CustomerEvent("message", "{}"), (customerEvent: CustomerEvent) => Map.empty)
  == Map("incomingMessage" -> "true"))

// or simply do (_: CustomerEvent)

assert(headerExtractor.applyOrElse(CustomerEvent("message", "{}"), (_: CustomerEvent) => Map.empty)
      == Map("incomingMessage" -> "true"))

否定情况

assert(headerExtractor.applyOrElse(CustomerEvent("something-else", "{}"), (_: CustomerEvent) => Map.empty) 
== Map())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM