Как я пишу макрос Clojure для создания регулярного выражения из Строки?

Я создаю макрос удобства. Часть удобства - то, что регулярное выражение может быть указано только с Строкой, а не # нотацией "ре".

Одна первая часть не может выяснить, то, как заставить макрос брать Строку и переписывать ее как Clojure regex (например, производить # нотацию "ре"). Я думаю, что это - синтаксис / выход из проблемы.

Моя первая наивная попытка (притворяющийся я только хочу часть String-to-regex):

(defmacro mymac [mystr] `#~mystr)

Даже возможно сделать то, что я пытаюсь сделать? Или, есть ли фактическая функция, чтобы взять Строку и произвести regex, вместо того, чтобы использовать # макрос читателя?

Или если я просто заскакиваю в Java и использую java.util.regex. Шаблон?

11
задан dirtyvagabond 6 August 2010 в 04:42
поделиться

3 ответа

Для этого есть функция: re-pattern

user=> (re-pattern "\\d+")
#"\d+"
29
ответ дан 3 December 2019 в 01:51
поделиться

Чтобы пояснить немного подробнее:

# "" - это макрос для чтения. Это разрешается читателем во время чтения. Таким образом, нет способа создать макрос, который разворачивается в макрос читателя, потому что фаза чтения давно прошла. Макрос возвращает фактическую структуру данных, представляющую расширенный код, а не строку, которая снова анализируется, как например. #define работает на C.

ответ j-g-faustus - это правильный путь (tm).

7
ответ дан 3 December 2019 в 01:51
поделиться

Я могу неправильно понять вопрос, но разве это не то, что вы хотите?

user=> (. java.util.regex.Pattern compile "mystr")
#"mystr"
0
ответ дан 3 December 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: