scala - 如何通过akka消息转发谓词参数
问题描述
我需要帮助在 Akka 消息中转发谓词参数。我在调用案例类时创建谓词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
满足 predicate的行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))
解决方案
通过创建一个type Predicate [T] = {String, T => Boolean}
.
然后将代码修改为:
case class select [T: ClassTag] (name: String, p: Predicate[T])
case class selectIn [T: ClassTag] (name: String, p: Predicate[T])
class Master extends Actor {
val router: ActorRef = actorOf (RoundRobinPool (4).props(props[Worker]), "router")
def receive: Receive = {
case select (name, p) =>
router ! Broadcast (selectIn (name, p)) // error on p
}
}
case Worker extends Actor {
def receive: Receive = {
case selectIn (name, p) =>
rMap(name).fetch(p._1, p._2) // error on p
}
}
object MasterTest {
val actor = ActorSystem("ActorSystem").actorOf(Props[Master], "root")
actor ! select [Int] ("Table1", ("Age", x => x < 25))
}
很想知道是否有其他方法可以解决这个问题。
推荐阅读
- google-apps-script - 从命名表中获取 ID
- php - PhpWord 罗马数字表示页码
- javascript - 如何向此 jquery 脚本添加更多 div 类?
- php - 子域路由 laravel 5.4
- php - MySQL:无线电检查插入具有多行的数据库
- reactjs - 我无法弄清楚为什么我的组件没有以更新的状态呈现。即使状态已更新并反映在数据库中
- java - 为什么我得到一个数组越界错误?
- git - 如何使用 git filter-branch 从我的仓库中删除文件?(“您需要从工作树的顶层运行此命令”)
- java - 从不同对象获取值的通用方法,无需通用超类型
- java - RunTimeINIT:*** 终止:Java 架构不是 64 位或未检测到