Scala: ¿la cláusula de "rendimiento" no da nada por alguna condición?

En el lenguaje Scala, quiero escribir una función que produzca números impares dentro de un rango dado. La función imprime un registro al iterar números pares. La primera versión de la función es:

def getOdds(N: Int): Traversable[Int] = {
  val list = new mutable.MutableList[Int]
  for (n <- 0 until N) {
    if (n % 2 == 1) {
      list += n
    } else {
      println("skip even number " + n)
    }
  }
  return list
}

Si omito la impresión de registros, la implementación se vuelve muy simple:

def getOddsWithoutPrint(N: Int) =
  for (n <- 0 until N if (n % 2 == 1)) yield n

Sin embargo, no quiero perder la parte de registro. ¿Cómo reescribo la primera versión de forma más compacta? Sería genial si pudiera reescribirse de manera similar a esto:

def IWantToDoSomethingSimilar(N: Int) =
  for (n <- 0 until N) if (n % 2 == 1) yield n else println("skip even number " + n)

Respuestas a la pregunta(4)

Su respuesta a la pregunta