В Clojure, как можно сравнить строки ввода пользователя с Longs? - PullRequest
1 голос
/ 16 октября 2011

В Clojure я строю карточную игру.Карты имеют масти и очки.

{:suit 1 :score 9}

Карты создаются с использованием диапазонов, например (range suitTotal), поэтому класс значений: suit и: score имеет значение Long.Игроки посылают командные строки, например «discard1.9» - это запрос на сброс.Использование регулярного выражения для анализа этого:

(re-seq #"[0-9]+" command)

приводит к строковым элементам "1" и "9".Карта, созданная с этими результатами, будет

{:suit "1" :score "9"}

. Я бы хотел сравнить ее с исходной картой.В настоящее время я использую (Integer / parseInt) для преобразования строк.

Значение масти может быть построено из другого типа, например из ключевого слова, но значение оценки используется как число в другом месте.

Ответы [ 2 ]

4 голосов
/ 16 октября 2011

использовать строку для чтения

DEMO

user=> (read-string "1")
1
3 голосов
/ 16 октября 2011

Хорошим подходом было бы проанализировать строки как числа, а затем использовать = для сравнения.

user=> (Integer/parseInt "1")
1

Преимущество этого перед строкой чтения в том, что оно более ограничено. Это не будет анализировать строки, которые выглядят как структуры данных clojure.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...