Несвязанная «защищенная» запись в трассировке стека - PullRequest
0 голосов
/ 25 мая 2011

Скопировано из списка пользователей 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:  }

1 Ответ

2 голосов
/ 25 мая 2011

Не прямой ответ, но я надеюсь, что это будет полезно:

Компилятор Scala иногда переводит ваш код способами, которые трудно понять, особенно если вы используете замыкания и другие вещи, для которых нет прямого эквивалента в Java.

Попробуйте скомпилировать свой код с помощью scalac -print, который покажет вам, что компилятор Scala делает из вашего исходного кода. Вам нужно поискать результаты, чтобы точно узнать, что происходит с вызовами в вашем коде.

...