Уточните строку только для определенных значений scala - PullRequest
3 голосов
/ 21 мая 2019

Есть ли способ уточнить строку только до определенного подмножества значений? Например, у меня есть список из 500 ключей в хэш-карте. Но я хочу, чтобы были вставлены только определенные ключи. Например, «abcd» и «aaaa» являются допустимыми ключами, но «abdc» недопустим. Есть ли способ уточнить строку только для одного из заданных 500 ключей?

Я предполагаю, что способ сделать это - просто очень длинное регулярное выражение, которое соответствует abcd|aaaa?

Редактировать : Использование fthomas / уточненной библиотеки, в частности, функции MatchesRegex. Хотите знать, есть ли лучший подход, который я пропускаю.

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Scala 3, кажется, Разрешить одиночные игры в союзах # 6299 вот так

val refinedString: "abcd" | "aaaa" = "aaaa"

, в то время как abdc приведет к следующей ошибке

val refinedString: "abcd" | "aaaa" = "abdc"
                                     ^^^^^^
                           Found:    String("abdc")
                           Required: String("abcd") | String("aaaa")

У меня это работало с версией Dotty Scala 0.15.0-bin-20190517-fb6667b-NIGHTLY.

0 голосов
/ 24 мая 2019

В итоге я просто использовал сгенерированный исходный код, который имеет каждый известный ключ внутри конструкции MatchesRegex (a|b..) на 500 ключей.Оно работает.Это не красиво, но это также сгенерированный исходный код, с которым мне не приходится иметь дело, так что все в порядке, я думаю.

...