Scala连接循环结果

cem*_*nds 3 for-loop scala yield concatenation

我试图连接3个序列作为具有yield的循环的个体结果.没有临时变量,我无法让它工作.有人知道更好的选择吗?notWorking版本在第一个++之后的方法"非法启动简单表达式"的第四行给出了编译器错误.

def working() : Seq[Seq[Elem]] = {
    val result = for(index <- 0 until COMPLETE_INPUT_CHANNELS) yield {
        getModesOfCompleteInputChannel(index)
    }
    val result2 = for(index <- 0 until INCOMPLETE_INPUT_CHANNELS) yield {
        getModesOfIncompleteInputChannel(index)
    }
    val result3 = for(index <- 0 until OUTPUT_CHANNELS) yield {
        getModesOfOutputChannel(index)
    }
    return result ++ result2 ++ result3
}

def notWorking() : Seq[Seq[Elem]] = {
    for(index <- 0 until COMPLETE_INPUT_CHANNELS) yield {
        getModesOfCompleteInputChannel(index)
    } ++ for(index <- 0 until INCOMPLETE_INPUT_CHANNELS) yield {
        getModesOfIncompleteInputChannel(index)
    } ++ for(index <- 0 until OUTPUT_CHANNELS) yield {
        getModesOfOutputChannel(index)
    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ila 15

这个解决方案怎么样?

val tasks = Seq(
    (COMPLETE_INPUT_CHANNELS, getModesOfOutputChannel),
    (INCOMPLETE_INPUT_CHANNELS, getModesOfIncompleteInputChannel),
    (OUTPUT_CHANNELS, getModesOfOutputChannel))

tasks flatMap {
    case (limit, processing) => 0 until limit map processing
}
Run Code Online (Sandbox Code Playgroud)


Dom*_*mra 6

为什么不呢?

(0 until COMPLETE_INPUT_CHANNELS).map(getModesOfCompleteInputChannel) ++
(0 until COMPLETE_INPUT_CHANNELS).map(getModesOfIncompleteInputChannel) ++
(0 until OUTPUT_CHANNELS).map(getModesOfOutputChannel)
Run Code Online (Sandbox Code Playgroud)

虽然我喜欢MAD的解决方案.十分优雅.