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

问题描述 投票:1回答:1

我尝试从字符列表上的折叠操作中获取多个结果,然后使用对这两个值的解构赋值给它们自己的变量。但这似乎导致了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} )")

这个按预期工作,我唯一删除的是解构。奇怪的是,如果我删除内部的时间(并仅用双构造函数替换它),代码可以同时工作。

提前致谢。

kotlin fold destructuring
1个回答
2
投票

这是Kotlin Script编译中的一个错误。

感谢@razr报告:KT-22029

© www.soinside.com 2019 - 2024. All rights reserved.