2011-05-25 47 views
0

从Scala的用户列表,它没有接收到爱抄...无关的“保护”条目

以下元素报道的 例外期间是在栈:

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: } 

回答

2

不是一个直接的答案,但我希望这将是有益的:

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

尝试使用scalac -print编译您的代码,它将向您展示Scala编译器对源代码的作用。您必须搜索输出才能看到代码中的调用会发生什么。