2017-12-27 141 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

回答