从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: }
答案 0 :(得分:2)
不是直接的答案,但我希望这会有用:
Scala编译器有时会以难以理解的方式翻译您的代码,特别是如果您使用闭包和其他在Java中没有直接等效的东西。
尝试使用scalac -print
编译代码,这将向您展示Scala编译器的源代码。您必须搜索输出以查看代码中调用的确切内容。