堆栈跟踪中不相关的“受保护”条目

时间:2011-05-25 12:46:07

标签: scala stack-trace

从scala-user列表复制,它没有收到任何爱...

以下元素报告在堆栈中 例外:

at mypackage.MessageManagerDAO.update(MessageManagerDAO.java:100)
at mypackage.QueueDao.protected$update(QueueDao.scala:58)
at mypackage.QueueDao$$anon$1$$anonfun$to$1.apply(QueueDao.scala:131)
at mypackage.QueueDao$$anon$1$$anonfun$to$1.apply(QueueDao.scala:129)
at scala.Option.foreach(Option.scala:185)
at mypackage.QueueDao$$anon$1.to(QueueDao.scala:129)

奇怪的是,第131行与第58行无关。第58行没有 这个堆栈中的业务。两者之间唯一的共同点 条目是它们都调用抽象超类方法 MessageManagerDAO.update(Java)和逻辑流程类似。

protected表示什么?为什么它会出现在我的脑海中? 堆栈跟踪?

我正在使用Scala 2.8.1

以下是一些代码段:

57: maybeQueue.foreach{queueDef =>
58:   val updateCount = update(SQL.updateLastReadAttempt, queueDef.category, queueDef.host)
59:   if (updateCount == 0) update(SQL.insertLastReadAttempt, queueDef.category, queueDef.host)
60:  }

129: message.relatedId.foreach{relatedId =>
130:   val updated = update(SQL.incrementMessageCount, relatedId, qd.category, qd.host)
131:   if (updated == 0) update(SQL.insertMessageCount, relatedId, qd.category, qd.host)
132:  }

1 个答案:

答案 0 :(得分:2)

不是直接的答案,但我希望这会有用:

Scala编译器有时会以难以理解的方式翻译您的代码,特别是如果您使用闭包和其他在Java中没有直接等效的东西。

尝试使用scalac -print编译代码,这将向您展示Scala编译器的源代码。您必须搜索输出以查看代码中调用的确切内容。