在此示例中(来自here):
(defmethod event-msg-handler :chsk/recv
[{:as ev-msg :keys [?data]}]
(logf "Push event from server: %s" ?data)))
其中?data
是vector
,?
是否有任何目的或表示某些内容?
答案 0 :(得分:3)
通常,符号中的标点符号是一种命名约定。尾随?
通常表示谓词函数或某个布尔标志。
核心API中的示例包括map?
和number?
之类的内容。示例可能如下所示:
=> (filter number? [1 "foo" 2 :bar])
(1 2)
=> (remove number? [1 "foo" 2 :bar])
("foo" :bar)
=> (def debug? true)
(when debug? (println "Debugging")
尾随!
通常表示发生了某些突变,例如
=>(def an-atom (atom 0))
=> @an-atom
0
=> (reset! an-atom 10)
=> @an-atom
10
然而,一些图书馆确实附加了更多的意义。例如,cascalog使用前导?
!!
和!
来指示查询输出变量的一些不同属性。有关详细信息,请参阅The Cascalog Docs
答案 1 :(得分:0)
问号不会改变Clojure读取或评估符号的方式。包含问号的符号在完全相同的情况下由Clojure处理,而不是符号。
使用?因此,?数据符号只是Sente库作者使用的命名约定。