【发布时间】:2015-06-21 00:19:41
【问题描述】:
我有一些代码可以在 scala 2.10 中运行,但在 scala 2.11 中出现“断言错误”而失败。我想要一些关于我是否是个白痴、是否发生了变化或 2.11 中是否存在错误的反馈(我知道这不太可能。)
这是一件简单的事情。我有一个读入的单词文件,这些字母分成一张地图。
for (token <- logData.getLines().flatMap(x => x.split("\\s+"))) {
// Ignore empty lines which appear in the word count as ""
if (token != "") {
words += 1
counts(token) += 1
for (letters <- token.split("")) {
if (isOrdinary(letters)) {
letterCounts(letters) += 1
}
}
}
}
读入字母并将其映射到 letterCounts 后,我现在想提取频率最高的字母。我尝试使用
val maxLetterCounts = fixedLetterCounts.values.max
val highestLetter = letterCounts.filter((t) => t._2 == maxLetterCounts)
当它尝试运行过滤器时出现错误。 这在 scala 2.10 中有效,但在 scala 2.11 中我得到了
java.lang.AssertionError: assertion failed: List(value _2$mcI$sp, value _2$mcI$sp)
at scala.reflect.internal.Symbols$Symbol.suchThat(Symbols.scala:1916)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.matchingSymbolInPrefix$1(SpecializeTypes.scala:1460)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transformSelect$1(SpecializeTypes.scala:1483)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transform1(SpecializeTypes.scala:1579)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2$$anonfun$transform$3.apply(SpecializeTypes.scala:1428)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2$$anonfun$transform$3.apply(SpecializeTypes.scala:1428)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.reportError(SpecializeTypes.scala:1420)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transform(SpecializeTypes.scala:1428)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transform(SpecializeTypes.scala:1371)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transform1(SpecializeTypes.scala:1712)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2$$anonfun$transform$3.apply(SpecializeTypes.scala:1428)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2$$anonfun$transform$3.apply(SpecializeTypes.scala:1428)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.reportError(SpecializeTypes.scala:1420)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transform(SpecializeTypes.scala:1428)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transformSelect$1(SpecializeTypes.scala:1467)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transform1(SpecializeTypes.scala:1579)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2$$anonfun$transform$3.apply(SpecializeTypes.scala:1428)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2$$anonfun$transform$3.apply(SpecializeTypes.scala:1428)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.reportError(SpecializeTypes.scala:1420)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transform(SpecializeTypes.scala:1428)
at scala.tools.nsc.transform.SpecializeTypes$$anon$2.transform(SpecializeTypes.scala:1371)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
我已经在某种程度上截断了错误。
知道为什么这会起作用并在 2.10 中返回我想要但在 2.11 中中断的地图吗?
谢谢
院长
附:我确信这种风格不符合 scala 精神,如果有更好的方法来做我展示的任何事情,反馈很好,但也请回答主要问题。
【问题讨论】:
-
你能指出错误的确切位置吗?另外,你能添加失败的断言吗?
-
这看起来有点眼熟,但我不记得细节了。您能否提供一个完整的工作示例并指定您的 2.11 版本?
-
我添加了一个编辑来显示它失败的地方。过滤器尝试运行时失败。我不知道您所说的“失败的断言”是什么意思。错误消息紧跟在过滤器行之后,没有其他信息。
-
Travis,我会一起剪一些东西,明天做一个完整的版本。失败的是版本 2.11.5。
标签: scala