Замените строку на регулярное выражение, содержащее переменную без макроса - PullRequest
0 голосов
/ 28 декабря 2018

Мне нужно удалить некоторое содержимое в конце строки (eq_code) с помощью Clojure.Я хочу реализовать регулярное выражение, инициализированное переменной (вектор получения [3 1]) .

Возможно, макрос помог бы мне.

Вот код:

(reset! atom_code (clojure.string/replace eq_code #(str (get-in vector [3 1])) ""))

Ошибка:

IllegalArgumentException Invalid match arg: project.core$interpreted_lang_while$fn__4457@7ac4b7c5  clojure.string/replace (string.clj:102)

Есть ли способ заменить подстроку без использования макроса?Например, используя функцию, которая возвращает регулярное выражение.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

https://clojuredocs.org/clojure.string/replace

replace параметр соответствия (второй аргумент) не может быть функцией.Решение состоит в том, чтобы создать шаблон из вашего динамического значения:

user> (def data [["a" "b"] ["c" "d"]])
#'user/data

user> (clojure.string/replace "mama" (re-pattern (get-in data [0 0])) "")
"mm"

, а также: vector - основная функция, поэтому старайтесь не использовать его в качестве имени переменной (хотя на самом деле это не так.что не так с твоим решением)

0 голосов
/ 28 декабря 2018

Я думаю, что проблема в том, что vector является закрывающей функцией, и я предполагаю, что у вас есть некоторые данные с именем vector, которые вызывают путаницу компилятора.

Не могли бы вы обновить ваш вопрос с примерами данных и желаемым результатом?

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