1

私は最近、ペット プロジェクトで Scala を試していて、次のコード スニペットがメモリを消費していることに気付きました (私はこのメソッドを頻繁に呼び出します)。

private[this] def isConsistent(startLang2: Int, lengthLang2: Int, 
    startLang1: Int, lengthLang1: Int,
    lang2FinalAlignments: ArrayBuffer[ArrayBuffer[Int]]): Boolean = {

    (startLang2 to (startLang2 + lengthLang2)) foreach {
      i =>
        val valueSeq = lang2FinalAlignments(i)
        if (valueSeq.size == 0 || valueSeq.exists { value => value < startLang1 || value > (startLang1 + lengthLang1) })
          false
    }
    true
}

「false」を「return false」に変更すると、状況は解決したようです。

private[this] def isConsistent(startLang2: Int, lengthLang2: Int, 
    startLang1: Int, lengthLang1: Int,
    lang2FinalAlignments: ArrayBuffer[ArrayBuffer[Int]]): Boolean = {

    (startLang2 to (startLang2 + lengthLang2)) foreach {
      i =>
        val valueSeq = lang2FinalAlignments(i)
        if (valueSeq.size == 0 || valueSeq.exists { value => value < startLang1 || value > (startLang1 + lengthLang1) })
          return false
    }
    true
}

私がそれについて考えるとき、スニペット#2は、メソッドがどのように機能するかを期待/したいという点で理にかなっています。誰かが最初のスニペットが何をしているのか説明してもらえますか?

4

1 に答える 1