Мне нужна помощь в пересылке параметра предиката в сообщениях Akka. Я создаю предикат, когда вызываю класс case в Master
. Мне нужно переслать этот параметр на Worker
узел. Вот часть моей реализации.
case class select [T: ClassTag] (name: String, cName: String, p: T => Boolean)
case class selectIn [T: ClassTag] (name: String, cName: String, p: T => Boolean)
class Master extends Actor {
val router: ActorRef = actorOf (RoundRobinPool (4).props(props[Worker]), "router")
def receive: Receive = {
case select (name, cName, p) =>
router ! Broadcast (selectIn (name, cName, p)) // error on p
}
}
case Worker extends Actor {
def receive: Receive = {
case selectIn (name, cName, p) =>
rMap(name).fetch(cName, p) // error on p
}
}
object MasterTest {
val actor = ActorSystem("ActorSystem").actorOf(Props[Master], "root")
actor ! select [Int] ("Table1", "Age", x => x < 25)
}
rMap
является картой name -> Table
. fetch
- это функция на Table
для поиска строк, где cName
удовлетворяет предикату p
.
Я получаю следующую ошибку:
type mismatch;
found : Nothing => Boolean
required: T => Boolean
router ! Broadcast (selectIn (r.nextInt(randomSeed), name, cName, p))
type mismatch;
found : Nothing => Boolean
required: T => Boolean
sender() ! selectReply ("select _" + uc + "_" + tableMap(name), rSeq(tableMap(name)).select(cName, p))