如何在Clojure中的fn中使用未定义的符号?

Zub*_*air 2 clojure

在clojure中我想写一个函数,我可以像这样调用:

(function undefined-symbol-which-means-something-else)
Run Code Online (Sandbox Code Playgroud)

:有没有办法编写这样的函数而不诉诸',:或使用宏?

mik*_*era 5

如果符号未定义,则总是会给您一个错误.这是因为Clojure会在调用函数之前尝试解析符号,并且失败.

一些选项需要考虑(以我个人的偏好顺序......):

  • 使用关键字(即":my-keyword") - 毕竟这是他们的设计目标!您永远不需要预先定义关键字.这也许是最惯用的做事方式.
  • 使用常规字符串作为参数.如果需要,可以随后将其转换为符号(符号"somename")
  • 如果函数是宏而不是函数,那么理论上你可以通过动态重新解释符号来实现你想要的东西.这是有效的,因为宏观扩展在评估之前发