在这个例子中(从here):在Clojure中,符号名称开头的问号是否有特殊含义?
(defmethod event-msg-handler :chsk/recv
[{:as ev-msg :keys [?data]}]
(logf "Push event from server: %s" ?data)))
其中?data
是vector
,并在?
有任何目的或意味着什么?
在这个例子中(从here):在Clojure中,符号名称开头的问号是否有特殊含义?
(defmethod event-msg-handler :chsk/recv
[{:as ev-msg :keys [?data]}]
(logf "Push event from server: %s" ?data)))
其中?data
是vector
,并在?
有任何目的或意味着什么?
问号不会改变Clojure读取或评估符号的方式。包含问号的符号在Clojure中的处理方式与符号不同。
使用?在?数据符号中,因此只是Sente库的作者使用的命名约定。
通常符号中的标点符号是一种命名约定。尾随?
通常表示一个谓词函数或一些布尔标志。
核心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")
尾!
通常表示一些替代突变是发生,e.g
=>(def an-atom (atom 0))
=> @an-atom
0
=> (reset! an-atom 10)
=> @an-atom
10
但是,有些库不附加进一步的含义。例如,Cascalog使用前导?
!!
和!
来指示查询输出变量的一些不同属性。有关更多信息,请参见The Cascalog Docs
怎么样领先'?' – 2014-09-26 01:44:01
看起来它只是一个命名约定。我认为他使用它作为可选参数,但我并不确定。 – Barmar 2014-09-25 06:01:45
看到这个问题:http://stackoverflow.com/questions/3951761/what-are-the-allowed-characters-in-a-clojure-keyword – 2014-09-25 06:27:43