Привет, У меня есть этот школьный проект, с которым я почти закончил, поэтому мне не нужна помощь с кодом, проблема в том, что я никогда не закодированы в clojure, но для этого задания пришлось сделать попытку и уловить макрос в clojure со связанными формами, есть некоторые команды REPL, которые, как ожидается, будут давать разные ответы для присваивания для передачи ,,Код ошибки clojure: java.lang.Integer не может быть отнесен к clojure.lang.IFn
Anyways Im получает ошибку что я был googling, но ничто не является специфическим для этой проблемы, и большинство объяснений в основном нуждаются в собственном объяснении. Ничто не кажется адаптированным новичком, поэтому для меня это не делает.
(defmacro safe [bindings & code]
(if (list? bindings)
`(try
~bindings
(catch Throwable except# except#))
(if (= (count bindings) 0)
`(try ~code
(catch Throwable except# except#))
`(let ~(subvec bindings 0 2)
(try
(safe ~(subvec bindings 2) [email protected])
(catch Throwable except# except#)
(finally
(. ~(bindings 0) close))))))) ;;safe
(def divider(safe (/ 1 0)))
(def reader (safe [s (FileReader. (java.io.File. "C:/text.txt"))] (. s read)))
Так ошибка Im получаю
=> (def v (safe [s (FileReader. (java.io.File. "C:/text.txt"))] (. s read)))
#'myProject.core/v
=> v
#<ClassCastException java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IFn>
Так любезно любой, кто знает Clojure пожалуйста, дайте мне несколько советов о том, что это неправильно, все намеки Im получая то, что должно быть paranthesis missplaced, Я проверял код снова и снова, но не могу найти какие-либо ошибки и т. Д. Спасибо!
Я сейчас не на компьютере, но это выглядит неплохо! Итак, macroexpand - отладчик? И код, который вы написали, написан в REPL справа? – MRK187
Это полезно при отладке, но это не отладчик. Он делает то, что он говорит, - показывает расширение макроса до его оценки. Вы можете найти поучительную версию функции 'safe-fn', макроса с' defn', а не 'defmacro', а затем отметить, что вызов' safe-fn' со всеми его аргументами, указанными отдельно, дает тот же результат, что и «макроэкземпляр-1» при цитированном макрокоманде. Да, это из сеанса REPL. –
Итак, позвольте мне понять это, моя ошибка связана с дополнительной паретией? Так что все, что мне нужно сделать, это найти его и избавиться от него, и ошибка исчезнет? – MRK187