Идентификаторы перечисления, запрещенные в операции сопоставления? - PullRequest
0 голосов
/ 22 августа 2010

У меня есть класс Enumeration, я извлек значения "id" из некоторых членов и сохранил их в переменных Int.Была ли это хорошая идея / нет, вопрос не в этом.

Вопрос в том, почему я не могу сделать следующее:

Допустим, у меня есть s: Int, который содержит одиниз этих значений идентификаторов ... и я хотел бы сделать сопоставление с фактическими значениями перечисления.Примерно так:

s match {QID.MEM_RD.id => // что-то

QID.MEM_WRT.id => // что-то другое}

Это кажетсячтобы дать мне ошибку, что "требуется стабильный идентификатор".Поэтому я заканчиваю тем, что пишу код вроде

if (s == QID.MEM_RD.id) // что-то еще if (s == QID.MEM_WRT.ID) // что-то еще

... мне просто немного странно, что в Scala есть эта замечательная функция, но она заставляет меня вернуться к более уродливому стилю кодирования - когда я бы предпочел использовать их функцию соответствия.

Любойидеи?Я думаю, что я могу реструктурировать, чтобы прекратить извлекать идентификаторы ... но только идея, что match не позволяет это, немного раздражает меня.

(Примечание: я нигде не пытаюсь хранить значения идентификаторовпостоянно ... просто используйте их на время выполнения программы.)

-Jay

1 Ответ

0 голосов
/ 25 октября 2010

Я думаю, что вы можете использовать, если охранники в этом случае.

s match {
  case a if (s == QID.MEM_RD.id) => println("you read!")
  case b if (s == QID.MEM_WRT.id) => println("you wrote!")
}

http://programming -scala.labs.oreilly.com / ch03.html # PatternMatching

...