折叠列表与 kotlin 中的解构分配配对

Fold list to pair with destructuring assignment in kotlin

我尝试从字符列表的折叠操作中获得多个结果,然后对两个值使用解构赋值给它们自己的变量。但这似乎导致 kotlin 编译器出现异常:

java.lang.UnsupportedOperationException: Don't know how to generate outer expression for class <closure-Test>

奇怪的是(对我来说)没有解构,这按预期工作。这是一个例子:

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} )")

这个按预期工作,我唯一删除的是解构。奇怪的是,如果我删除内部 when (并仅用 Pair 构造函数替换它),代码两次都有效。

提前致谢。

这是 Kotlin 脚本编译中的错误。

谢谢@razr for reporting it: KT-22029