Table of Content
现在,如果你真的有兴趣,可能已经迫不及待想要学习 Clojure
的语法了,下面我们再来列举一些 Clojure
的语法糖吧:
作用 | 语法糖 | 对应函数 |
---|---|---|
注释 | ; text 单行注释 |
宏(comment text)可以用来写多行注释 |
字符 (Java char 类型) |
\char \tab \newline \space \uunicode-hex-value |
(char ascii-code) (char \uunicode ) |
字符串 (Java String 对象) |
"text" |
(str char1 char2 ...) 可以把各种东西串成一个字符串 |
关键字是一个内部字符串;两个同样的关键字指向同一个对象;通常被用来作为map的key | :name |
(keyword "name") |
当前命名空间的关键字 | ::name |
N/A |
正则表达式 | #"pattern" |
(re-pattern pattern) |
逗号被当成空白通常用在集合里面用来提高代码可读性) | , (逗号) |
N/A |
链表(linked list) | '(items) (不会evaluate每个元素) |
(list items) 会evaluate每个元素 |
vector (和数组类似) | [items] |
(vector items) |
set | #{items} 建立一个hash-set |
(hash-set items) (sorted-set items) |
map | {key-value-pairs} 建立一个hash-map |
(hash-map key-value-pairs) (sorted-map key-value-pairs) |
给symbol或者集合绑定元数据 | #^{key-value-pairs} object 在读入期处理 |
(with-meta object metadata-map) 在运行期处理 |
获取symbol或者集合的元数据 | ^object |
(meta object) |
获取一个函数的参数列表 (个数不定的) | & name |
N/A |
函数的不需要的参数的默认名字 | _ (下划线) |
N/A |
创建一个java对象 (注意class-name后面的点) | (class-name. args) |
(new class-name args) |
调用java方法 | (. class-or-instance method-name args) 或者 (.method-name class-or-instance args) |
N/A |
串起来调用多个函数,前面一个函数的返回值会作为后面一个函数的第一个参数你还可以在括号里面指定额外参数注意前面的两个点 | (.. class-or-object (method1 args) (method2 args) ...) |
N/A |
创建一个匿名函数 | #(single-expression) 用 % (等同于 %1 ), %1 , %2来表示参数 |
(fn [arg-names] expressions) |
获取Ref, Atom 和Agent对应的valuea | @ref |
(deref ref) |
get Var object instead of the value of a symbol (var-quote) |
#'name |
(var name) |
syntax quote (使用在宏里面) | ` |
none |
unquote (使用在宏里面) | ~value |
(unquote value) |
unquote splicing (使用在宏里面) | ~@value |
none |
auto-gensym (在宏里面用来产生唯一的symbol名字) | prefix# |
(gensym prefix ) |