我可以避免在 Clojure resolve 中进行第二次符号查找吗?
Can I avoid a second symbol lookup in Clojure resolve?
我需要做很多字符串到符号值的处理,但有些字符串不会解析为符号。在取消引用 var 以获取符号的值之前,我编写了以下(示例)代码来测试给定字符串是否解析为已知符号。
(if (resolve (symbol "A")) @(resolve (symbol "A")) ;; If the resolve of "A" works, deref it.
false) ;; If "A" doesn't resolve to a var, return false.
可能是我想太多了。我担心必须做
(resolve (symbol "A"))
两次。有没有一种聪明的方法可以让我只执行一次这个“test-for-nil-and-deref-it-if-not”?也许是一个“安全”的取消引用函数,在取消引用 nil 时不会产生运行时错误?还是我不应该担心这段代码的性能?也许编译器很聪明?
我需要做很多字符串到符号值的处理,但有些字符串不会解析为符号。在取消引用 var 以获取符号的值之前,我编写了以下(示例)代码来测试给定字符串是否解析为已知符号。
(if (resolve (symbol "A")) @(resolve (symbol "A")) ;; If the resolve of "A" works, deref it.
false) ;; If "A" doesn't resolve to a var, return false.
可能是我想太多了。我担心必须做
(resolve (symbol "A"))
两次。有没有一种聪明的方法可以让我只执行一次这个“test-for-nil-and-deref-it-if-not”?也许是一个“安全”的取消引用函数,在取消引用 nil 时不会产生运行时错误?还是我不应该担心这段代码的性能?也许编译器很聪明?