我尝试从字符列表上的折叠操作中获取多个结果,然后使用对这两个值的解构赋值给它们自己的变量。但这似乎导致了kotlin编译器的异常:
java.lang.UnsupportedOperationException: Don't know how to generate outer expression for class <closure-Test$1>
奇怪(对我而言)没有解构,这是按预期工作的。这是一个例子:
val fstSec = "fst"
val (fst, snd) = "this is a test for folding to pair"
.toCharArray()
.fold(Pair(0, 0), { sumPair, char ->
when (fstSec) {
"fst" -> Pair(sumPair.first + char.toInt()*2, sumPair.second + char.toInt())
"snd" -> Pair(sumPair.first + char.toInt(), sumPair.second + char.toInt()*2)
else -> throw RuntimeException("exception")
}
})
println("( $fst , $snd )")
这导致例外。
val fstSec = "fst"
val pair = "this is a test for folding to pair"
.toCharArray()
.fold(Pair(0, 0), { sumPair, char ->
when (fstSec) {
"fst" -> Pair(sumPair.first + char.toInt()*2, sumPair.second + char.toInt())
"snd" -> Pair(sumPair.first + char.toInt(), sumPair.second + char.toInt()*2)
else -> throw RuntimeException("exception")
}
})
println("( ${pair.first} , ${pair.second} )")
这个按预期工作,我唯一删除的是解构。奇怪的是,如果我在时删除内部(并仅用 Pair 构造函数替换它),代码可以同时工作。
提前致谢。