Scala - orden de inicialización de vals

Tengo este fragmento de código que carga las propiedades de un archivo:

class Config {
  val properties: Properties = {
    val p = new Properties()
    p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
    p
  }

  val forumId = properties.get("forum_id")
}

Esto parece estar funcionando bien.

He intentado mover la inicialización deproperties en otro val,loadedProperties, Me gusta esto:

class Config {
  val properties: Properties = loadedProps
  val forumId = properties.get("forum_id")

  private val loadedProps = {
    val p = new Properties()
    p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
    p 
   }

}

¡Pero no funciona! (properties es nulo enproperties.get("forum_id") ).

¿Por qué sería eso? No esloadedProps evaluado cuando se hace referencia porproperties?

En segundo lugar, ¿es esta una buena manera de inicializar variables que requieren un procesamiento no trivial? En Java, los declararía.final campos, y hacer las operaciones relacionadas con la inicialización en el constructor.

¿Hay un patrón para este escenario en Scala?

¡Gracias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta