您是否知道在Akka/Scala中添加/删除路由到Broadcaster路由器的好方法?
我一直在看Resizer - 但是不能满足我的需求(我无法看到如何明确要求调整器调整大小(添加路由)并删除它似乎你需要向actor发送一个Poison Pill然后被删除).
到目前为止,我有一个带有ActorRef列表的路由器,我发送了AddRoutee和RemoveRoutee消息....
我的业务案例:我有一个演员从网络(通过代理)获取数据,并且需要将这些数据分发给独立的演员以便并行处理.由于收件人的图形性质(DAG),图表可以在运行时进化,顶点/边缘被修改,因此需要添加和删除路由
必须有一个更清洁的方法来做到这一点.
谢谢你的指点.
我希望Akka处理的代码示例:
class MDActor extends Actor {
@volatile var routees = Set[ActorRef]()
def receive = {
case ar: AddRoutee => routees = routees + ar.actorRef
case rr: RemoveRoutee => routees = routees - rr.actorRef
case msg => routees.foreach(r => r forward msg)
}
}
Run Code Online (Sandbox Code Playgroud) 请问以下最好的方法是什么?我有两个清单:
val l1 = List("a", "b")
val l2 = List(1, 2)
Run Code Online (Sandbox Code Playgroud)
我想生成这个:
List (
List(('a', 1), ('b', 1)),
List(('a', 1), ('b', 2)),
List(('a', 2), ('b', 1)),
List(('a', 2), ('b', 2))
)
Run Code Online (Sandbox Code Playgroud)
哪个基本上是第一个列表与第二个列表组合创建元组列表?考虑使用带滑动(2,2)的foldLeft来获得我的结果,但不能只是得到正确的结果.
解决方案应该适用于任何大小和类型,如List('a','b','c')和List("1","2")
谢谢
我有一个类型为boolean的二维数组(不重要)很容易以非功能样式迭代数组.怎么做FP风格?
var matrix = Array.ofDim[Boolean](5, 5)
Run Code Online (Sandbox Code Playgroud)
对于ex,我想迭代给定列的所有行并返回与特定函数匹配的int列表.示例:对于第3列,如果(4,3),(5,3)处的单元格与特定函数匹配,则遍历第1行到第5行以返回4,5.太多了
def getChildren(nodeId: Int) : List[Int] = {
info("getChildren("+nodeId+")")
var list = List[Int]()
val nodeIndex = id2indexMap(nodeId)
for (rowIndex <- 0 until matrix.size) {
val elem = matrix(rowIndex)(nodeIndex)
if (elem) {
println("Row Index = " + rowIndex)
list = rowIndex :: list
}
}
list
}
Run Code Online (Sandbox Code Playgroud) 我有一些带有自定义Java注释的Scala代码...用于监视目的(JMX和ModelMBeanOperationInfo)我想将MethodSymbol转换为Java方法.仅供参考,这是我为我的注释方法检索Scala符号的代码:
val jmxannotation = ru.typeOf[EnableForMonitoring]
val m = runtimeMirror(getClass.getClassLoader)
val mSymbol = m.classSymbol(jmxe.getClass)
val mType = mSymbol.selfType
mType.declarations.foreach(symbol => {
symbol.annotations.find(a => a.tpe == jmxannotation) match {
case Some(_) => {
info(s"(A) For $symbol on $jmxe, annotated for monitoring")
val ms = symbol.asMethod
// TODO: HOW TO CONVERT ms to a Java Method
}
case None =>
}
})
Run Code Online (Sandbox Code Playgroud)
谢谢.
在以下两个答案之后编辑我正在尝试编译以下Scala代码.
abstract class C {
type T <: C
def x(other: T): (T, T)
}
class C1 extends C {
override type T = C1
override def x(other: C1): (C1, C1) = (this, this)
}
def doSthg(cs1 : List[C]) {
val e1 = cs1(0)
val e2 = cs1(1)
e1.x(e2)
}
Run Code Online (Sandbox Code Playgroud)
但是失败并显示以下消息:
Description Resource Path Location Type
type mismatch; found : e2.type (with underlying type Chromo[G]) required: e1.C PI3.sc /GA/src/org/jts/ga line 76 Scala Problem
type mismatch; found : e2.type …Run Code Online (Sandbox Code Playgroud)