符号名称开头的问号在 Clojure 中有什么特殊含义吗?

问题描述 投票:0回答:2

在此示例中(来自此处):

(defmethod event-msg-handler :chsk/recv
  [{:as ev-msg :keys [?data]}]
  (logf "Push event from server: %s" ?data)))

其中

?data
vector
?
有什么目的或表示什么吗?

clojure clojurescript
2个回答
5
投票

问号不会改变 Clojure 读取或评估符号的方式。 Clojure 处理包含问号的符号与不包含问号的符号完全相同。

因此,在

?
符号中使用
?data
只是 Sente 库作者使用的命名约定。


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 使用前导

?
!!
!
来指示查询输出变量的一些不同属性。请参阅Cascalog 文档了解更多信息

© www.soinside.com 2019 - 2024. All rights reserved.