我刚到Kotlin,我已经成功地调用了一个函数返回两个变量else where在我的代码,但它给予了一个错误,当使用如图所示。一切工作,直到我决定我想要返回两个变量。我可以让它工作,如果我使用if then语句,但这是不干净的。有没有办法做到这一点使用lambda?它告诉我第一个值是expression unused,第二个值是布尔值。
fun block (puzzle: Array<IntArray>, x:Int, y:Int): Pair<MutableList<Int>, MutableSet<Int>> {
var blockNums: MutableList<Int> = mutableListOf()
var blockNumsFinal: MutableSet<Int> = mutableSetOf()
when {
((x in 0..2) and (y in 0..2)) -> (blockNums, blockNumsFinal) = getBlock1(puzzle, x, y)
((x in 3..5) and (y in 0..2)) -> blockNums = getBlock2(puzzle, x, y)
((x in 6..8) and (y in 0..2)) -> blockNums = getBlock3(puzzle, x, y)
((x in 0..2) and (y in 3..5)) -> blockNums = getBlock4(puzzle, x, y)
((x in 3..5) and (y in 3..5)) -> blockNums = getBlock5(puzzle, x, y)
((x in 6..8) and (y in 3..5)) -> blockNums = getBlock6(puzzle, x, y)
((x in 0..2) and (y in 6..8)) -> blockNums = getBlock7(puzzle, x, y)
((x in 3..5) and (y in 6..8)) -> blockNums = getBlock8(puzzle, x, y)
((x in 6..8) and (y in 6..8)) -> blockNums = getBlock9(puzzle, x, y)
}
return Pair(blockNums, blockNumsFinal)
}
我在谷歌搜索中没有找到答案。
1条答案
按热度按时间vltsax251#
这一点:
看起来你试图对已经声明的变量使用一个反结构 * 声明 * 语法。这是不允许的。你只能用它来声明(因此得名)。
因为你的另一个函数显然已经返回了一个对,所以这应该可以工作,但是我猜测是因为我不确定你的其他函数的返回类型。
你还误用了
and
中缀函数。它是用于逐位比较的。当用于布尔表达式时,它可以防止过早退出总计表达式,这意味着如果第一个表达式为假,它仍然会冗余地计算第二个表达式。这不是你想要的。你应该在这里使用&&
。关于您尝试使用的语法,如果存在,则称为"解构 * 赋值 *"。There's a feature request on the Kotlin YouTrack page for it.