Проблема с примером заключается в том, что перечисления объявляются как объекты. Экземпляр объекта не может быть найден на основе имени класса, поэтому незначительное изменение исправляет это. Кроме того, do для обобщений метод find уже отвлекся на абстрактный тип Value, объявленный в Enumeration, поэтому нам нужно добавить instanceOf для исправления типизации. Для
универсальный псевдоним, E # Значение является правильным. Это обеспечивает хороший набор текста.
def valueOf[E <: Enumeration](enum: E, s : String): E#Value =
enum.values.find( { it => it.toString == s } ).get.asInstanceOf[E#Value]
object WeekDay extends Enumeration {
val Sun, Mon, Tue, Wed, Thu, Fri, Sat = Value
}
object Currency extends Enumeration {
val USD, GBP, EUR = Value
}
val mySun: WeekDay.Value = valueOf(WeekDay,"Sun")
val myCur: Currency.Value = valueOf(WeekDay,"Sun") // fails to compile