我是 scala 的新手,我正在编写 scala 代码来实现糕点协议。协议本身并不重要。有节点,每个节点都有一个我要填充的路由表。这是代码的一部分:
def act () {
def getMatchingNode (initialMatch :String) : Int = {
val len = initialMatch.length
for (i <- 0 to noOfNodes-1) {
var flag : Int = 1
for (j <- 0 to len-1) {
if (list(i).key.charAt(j) == initialMatch(j)) {
continue
}
else {
flag = 0
}
}
if (flag == 1) {
return i
}
}
return -1
}
// iterate over rows
for (ii <- 0 to rows - 1) {
for (jj <- 0 to 15) {
var initialMatch = ""
for (k <- 0 to ii-1) {
initialMatch = initialMatch + key.charAt(k)
}
initialMatch += jj
println("initialMatch",initialMatch)
if (getMatchingNode(initialMatch) != -1) {
Routing(0)(jj) = list(getMatchingNode(initialMatch)).key
}
else {
Routing(0)(jj) = "NULL"
}
}
}
}// act
问题是当对 getMatchingNode 的函数调用发生时,演员自己突然死亡。'list' 是所有节点的列表。(节点对象列表)此外,这种行为并不一致。每个参与者(对于 10 个节点)应该调用 getMatchingNode 15 次。但是在调试时,演员在一次调用后或有时在 3-4 次调用后会在 getMatchingNode 函数调用中杀死自己。被执行的 scala 库代码是这样的:
def run() {
try {
beginExecution()
try {
if (fun eq null)
handler(msg)
else
fun()
} catch {
case _: KillActorControl =>
// do nothing
case e: Exception if reactor.exceptionHandler.isDefinedAt(e) =>
reactor.exceptionHandler(e)
}
reactor.kill()
}
Eclipse 显示此代码已从 getMatchingNode 函数中的 for 循环调用
def getMatchingNode (initialMatch :String) : Int = {
val len = initialMatch.length
for (i <- 0 to noOfNodes-1)
奇怪的是,有时循环表现正常,有时它会进入杀死演员的scala代码。
任何输入代码有什么问题?
任何帮助,将不胜感激。