val size: Int = o.getSize
size match
{
case MyObject.Size.small.id => println("Small")
case MyObject.Size.medium.id => println("Medium")
case _ => throw ne UnknownSizeException
}
Не компилируется, я получаю странные ошибки в своей среде IDE, но это потому, что я использую градиент и много унаследованного Java-кода, который я должен постепенно обновлять.Scala match int на перечислении
Я все еще не уверен, почему это не работает. Малый имеет идентификатор 1, средний из 2.
Теперь, если я соответствовать следующим образом:
case s: MyObject.Size.small.id => println("Small")
символ идентификатор не может быть решена.
Почему это?
Если я добавлю вручную 1 и 2, все работает как шарм.
редактировать
Я думаю, что одна проблема будет то, что .id начинается с нуля, в то время как мой размер начинается с 1 (имеет смысл здесь, как это фактический размер)
Но это само по себе может Это не проблема, не так ли? Потому что я все равно соглашусь.
Но как я мог преодолеть это?
case MyObject.Size.small.id + 1 => println("Won't work!")
редактировать: Мой фактическое решение, благодаря Саше Кольберг
MyObject.Size(size+1) match
{
case MyObject.Size.SMALL => ...
...
}
Какой тип MyObject.Size.small.id? Причина второй проблемы (идентификатор символа) заключается в том, что вы сказали, что тип s - это MyObject.Size.small.id, который не является типом. –