【发布时间】:2016-06-28 22:49:42
【问题描述】:
我正在编写一个确定表单(例如(reverse [1 2 3]))是否为文字的函数。为此,我有以下代码:
(defn literal? [form]
(let [evaluation (try
(eval form)
(catch Exception exception false))]
(if evaluation
(= evaluation form)
true)))
这会首先尝试评估表单;如果失败,那么我们将表单视为文字。
如果表单评估成功,那么我们会进一步检查评估是否等于表单本身。如果是这样,那就是字面意思。
该函数在 .clj 文件中应用于 [1 2 3] 时有效,但在 .cljs 文件中出现以下错误:
TypeError: Cannot read property 'call' of undefined
at eval (/home/peter/ide/src-cljs/ide/core.cljs[eval16]:71:14)
at eval (native)
at Function.<anonymous> (file:///opt/lighttable-0.8.1-linux/resources/app/core/node_modules/lighttable/bootstrap.js:35236:461)
at b (file:///opt/lighttable-0.8.1-linux/resources/app/core/node_modules/lighttable/bootstrap.js:6188:14)
at a (file:///opt/lighttable-0.8.1-linux/resources/app/core/node_modules/lighttable/bootstrap.js:6234:18)
at cljs.core.do_dispatch (file:///opt/lighttable-0.8.1-linux/resources/app/core/node_modules/lighttable/bootstrap.js:13583:26)
at cljs.core.MultiFn.cljs$core$IMultiFn$_dispatch$arity$2 (file:///opt/lighttable-0.8.1-linux/resources/app/core/node_modules/lighttable/bootstrap.js:13655:32)
at cljs.core._dispatch (file:///opt/lighttable-0.8.1-linux/resources/app/core/node_modules/lighttable/bootstrap.js:13568:14)
at a (file:///opt/lighttable-0.8.1-linux/resources/app/core/node_modules/lighttable/bootstrap.js:13662:32)
at b [as call] (file:///opt/lighttable-0.8.1-linux/resources/app/core/node_modules/lighttable/bootstrap.js:13666:14)
有人有可以在 ClojureScript 中使用的解决方案吗?
提前致谢!
【问题讨论】:
标签: javascript clojure clojurescript