Если внешние значения / переменные находятся внутри функционального блока, способ обойти проблему - заключить их в анонимный класс, дав ему конкретное имя. S.A.
val a=1
val c = new { val a=a } // does not compile
val s = new { val a=1 }
val c = new { val a=s.a } // compiles :)
Конечно, использование простых имен также поможет, но в некоторых случаях это означает префикс / постфикс с _ $ и т. Д. Это альтернатива для них.