3

個々のforループの結果として3つのシーケンスをyieldで連結しようとしています。一時変数なしでは動作させることができません。誰かがより良いオプションを知っていますか?notWorkingバージョンでは、最初の++の直後のメソッド「単純な式の不正な開始」の4行目でコンパイラエラーが発生します。

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)
    }
4

3 に答える 3

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
}
于 2012-11-27T12:45:07.263 に答える
6

なぜこれではないのですか?

(0 until COMPLETE_INPUT_CHANNELS).map(getModesOfCompleteInputChannel) ++
(0 until COMPLETE_INPUT_CHANNELS).map(getModesOfIncompleteInputChannel) ++
(0 until OUTPUT_CHANNELS).map(getModesOfOutputChannel)

私はMADのソリューションが好きですが。とてもエレガント。

于 2012-11-27T12:47:16.497 に答える
2

++ここはyield表現の一部として扱われていると思います。それを機能させるには、for内包表記をかっこで囲みます。

于 2012-11-27T12:44:04.910 に答える