Scala - kolejność inicjalizacji vals

Mam ten fragment kodu, który ładuje właściwości z pliku:

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

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

Wydaje się, że działa dobrze.

Próbowałem przenieść inicjalizacjęproperties w inny val,loadedProperties, lubię to:

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 
   }

}

Ale to nie działa! (properties ma wartość nullproperties.get("forum_id") ).

Dlaczego miałoby to być? Nie jestloadedProps oceniane, gdy odwołuje się doproperties?

Po drugie, czy jest to dobry sposób na zainicjowanie zmiennych, które wymagają nietrywialnego przetwarzania? W Javie deklarowałbym jefinal pola i wykonaj operacje związane z inicjalizacją w konstruktorze.

Czy istnieje schemat dla tego scenariusza w Scali?

Dziękuję Ci!

questionAnswers(3)

yourAnswerToTheQuestion