2011-05-25 44 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編譯器對源代碼的作用。您必須搜索輸出才能看到代碼中的調用會發生什麼。