使用case类和actor键入mismatch(String)

时间:2018-02-01 20:40:17

标签: string scala akka

当我试图引用代码时出现一些格式问题,所以这是图片:(

image description here

import akka.actor.{Actor, ActorSystem, Props}

case class Number(n: Int)
case class String(s: String)

class DoublingActor extends Actor {
  def receive: Receive = {
    case Number(n) => println(s"Result of doubling $n: ${n*2}")
    case String(s) => println(s"Result of doubling $s: ${s}${s}")
  }
}

object Double extends App {
  val system = ActorSystem("DoublerSystme")
  val doubler = system.actorOf(Props[DoublingActor], "doubler")

  doubler ! Number(5)
  doubler ! String("test")
}

问题是,演员可以正常使用数字,但是如何添加两次返回字符串的匹配函数?

2 个答案:

答案 0 :(得分:1)

你看到了什么行为?由于您的问题被包装在图像中,我无法测试,但我希望您使用描述性消息object String is not a case class, nor does it have an unapply/unapplySeq member收到编译错误。

因为它没有unapply成员,所以您需要将语句修改为

case s: String => println(s"Result of doubling $s: ${s}:${s}")

答案 1 :(得分:1)

您应避免将案例类命名为String,尤其是在您的情况下,使用String参数类型:

case class String(s: String)

编译器会混淆期望参数类型与您想要的实际String类型不同。如果您明确指定java.lang.String作为参数类型,则您的应用程序将起作用:

case class String(s: java.lang.String)

在任何情况下,我都不建议将案例类命名为String