2017-12-27 143 views
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})") 

这一个按预期工作,我删除的唯一东西是解构。奇怪的是,如果我删除内部(并将其替换为构造函数),代码工作两次。

在此先感谢。

+0

这似乎是一个错误。请报告给[kotl.in/issue](https://kotl.in/issue) – hotkey

+0

顺便说一句,我试着用Kotlin 1.2.10编译第一个示例,它工作得很好。它可能已经被修复了。您使用的是什么Kotlin版本? – hotkey

+0

Kotlin版本1.2.0(JRE 1.8.0_144-b01) – razr

回答