我正在尝试将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)
}
答案 0 :(得分: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
}
答案 1 :(得分:6)
为什么不呢?
(0 until COMPLETE_INPUT_CHANNELS).map(getModesOfCompleteInputChannel) ++
(0 until COMPLETE_INPUT_CHANNELS).map(getModesOfIncompleteInputChannel) ++
(0 until OUTPUT_CHANNELS).map(getModesOfOutputChannel)
虽然我确实喜欢M.A.D的解决方案。很优雅。
答案 2 :(得分:2)
我相信,++
此处被视为yield
表达式的一部分。为了使其有效,只需将for
理解包装在括号中。