#scala
#scala
Вопрос:
Если у меня есть следующий объект scala:
object CustomerState {
val PENDING = "pending"
val TRIAL = "trial"
val PAYING = "paying"
val DEACTIVATED_TRIAL = "deactivated_trial"
val DEACTIVATED_PAYING = "deactivated_paying"
}
Как я могу получить список всех значений val? В этом случае я ищу, чтобы получить список («ожидающий», «пробный», «оплата», «деактивированный_trial», «деактивированный_paying»)
Заранее спасибо, Тодд
Ответ №1:
На данный момент я думаю, что лучшее, что вы можете сделать, это получить список всех методов с нулевым аргументом (поскольку для этого val
компилируются s) и вызвать их:
CustomerState.getClass.getMethods.toList.filter(_.getParameterTypes.isEmpty).map(_.invoke(CustomerState))
В версии 2.10 будет библиотека отражения, специфичная для Scala, которая улучшит ситуацию.
Ответ №2:
Разве вы не должны использовать Enumeration
?
Пример:
object Main extends Application {
object CustomerState extends Enumeration {
type CustomerState = Value
val Pending, Trial, Paying, Deactivated = Value
}
import CustomerState._
CustomerState.values foreach println // Will print each value
}
Комментарии:
1. Я думал, что преобладающая мудрость заключалась в том, что перечисление Scala было отклонением, которого лучше избегать.
2. Я нахожусь под тем же впечатлением от использования перечисления в scala
3. Я буду использовать перечисления вместо отражения в любой день недели.
4. Эти объекты используются с классами Salat case, так что это не так просто