Как вызвать методы этого объекта на карте? - PullRequest
0 голосов
/ 26 октября 2018

Проблема: Мне нужно вызвать методы Objects, которые хранятся на карте, для данного ключа, как это сделать? Код:

trait Processor00 {
  def process(x:String): Unit
}
case class Processor20() extends Processor0 {
   override def process(x:String): Unit = println("Processor20 x :" + x)
}
case class Processor30() extends Processor0 {
   override def process(x:String): Unit = println("Processor30 x :" + x)
}
object UnitTest1 {
  def main( args : Array[String]):Unit ={
    val s:String = "yes"
    val myFuncs: Map[String,(String) => Unit ]=  Map(  
           "string2" -> Processor20().process(s), //Eroor 1. type mismatch; found : Unit required: String ⇒ Unit
          "string3" -> Processor30().process(s)
        )
   myFuncs.values.foreach(v => v());//how to call all  Objects' i.e.  process("Hi") here ???
  }
}

1 Ответ

0 голосов
/ 26 октября 2018

Processor20().process(s) называется функцией process и возвращает Unit

, но Processor20().process - это функция, которую можно сохранить на карте

Попробуйте что-то вроде:

trait Processor00 {
  def process(x:String): Unit
}
case class Processor20() extends Processor00 {
  override def process(x:String): Unit = println("Processor20 x :" + x)
}
case class Processor30() extends Processor00 {
  override def process(x:String): Unit = println("Processor30 x :" + x)
}


object Main extends App {
  val s: String = "yes"
  val myFuncs: Map[String, String => Unit] = Map(
    "string2" -> Processor20().process,
    "string3" -> Processor30().process
  )
  myFuncs.foreach { case (key, f) => f(s) } // or f(key)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...