2014-09-25 61 views
0

在这个例子中(从here):在Clojure中,符号名称开头的问号是否有特殊含义?

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

其中?datavector,并在?有任何目的或意味着什么?

+1

看起来它只是一个命名约定。我认为他使用它作为可选参数,但我并不确定。 – Barmar 2014-09-25 06:01:45

+0

看到这个问题:http://stackoverflow.com/questions/3951761/what-are-the-allowed-characters-in-a-clojure-keyword – 2014-09-25 06:27:43

回答

0

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

使用?在?数据符号中,因此只是Sente库的作者使用的命名约定。

2

通常符号中的标点符号是一种命名约定。尾随?通常表示一个谓词函数或一些布尔标志。

核心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

+1

怎么样领先'?' – 2014-09-26 01:44:01