Как вы оцениваете строку как выражение clojure?

Как мне получить что-то похожее на следующее?:

(evaluate-text "(+ 1 2)")  ; resolves to 3

Ответ 1

(load-string "(+ 1 2)")

Ответ 2

user> (eval (read-string "(+ 1 2)"))
3

Вам, вероятно, никогда не понадобится это делать. Макросы и fns делают такие вещи ненужными в 99% случаев. Это довольно хрупкое и может быть небезопасным, если эти строки поступают с пользовательского ввода и т.д.

Ответ 3

Как это должно быть? Clojure eval работает в списках, поэтому:

(eval (list + 1 2)) #=> 3