Programming Clojure学习笔记——开始

来源:互联网 发布:汪涵 知乎 编辑:程序博客网 时间:2024/05/17 08:14
1.3 探究Clojure库
Colujure代码都打包进库,每个库属于一个命名空间namespace,命名空间类似Java包。可以使用require来加载Clojure库:
(require quoted-namespace-symbol):
user=> (require 'examples.introduction)
nil
说明:前导单引号必须,它将库名引起来

使用库中函数
user=> (take 10 examples.introduction/fibs)
(0 1 1 2 3 5 8 13 21 34)

为了方便库中函数引用,可以引用命名空间,在当前命名空间中生成引用命名空间中所有名称的映射,这样在当前命名空间中就可以直接使用引用命名空间中的函数等,不需要带空间名前缀。
(refer quoted-namespace-symbol):
user=> (refer 'examples.introduction)
nil
user=> (take 10 fibs)
(0 1 1 2 3 5 8 13 21 34)
说明:REPL中默认命名空间为user

为了方便可以使用use函数一步完成require和refer库
(use quoted-namespace-symbol):
user=> (use 'examples.introduction)
nil
user=> (take 10 fibs)
(0 1 1 2 3 5 8 13 21 34)
说明:use函数加上:reload-all标识可以强制重新加载库

查找文档
1. 最基本的帮助函数doc
(doc name)
user=> (doc str)
-------------------------
clojure.core/str
([] [x] [x & ys])
  With no args, returns the empty string. With one arg x, returns
  x.toString().  (str nil) returns the empty string. With more than
  one arg, returns the concatenation of the str values of the args.
nil
说明:
(1) doc函数的返回值第一行输出函数的全名称命名空间+函数名
(2) 第二行输出函数的参数列表
(3) 第三行输出函数的doc-string(函数注释位于函数名后,参数列表前)

2. find-doc函数模糊查询
(find-doc s)

参数命名惯例:
Parameter Usage
a A Java array
agt An agent
coll A collection
expr An expression
f A function
idx Index
r A ref
v A vector
val A value

3. 查看Clojure函数源码
(clojure.contrib.repl-utils/source a-symbol)
user=> (use 'clojure.contrib.repl-utils)
nil
user=> (source identity)
(defn identity
  "Returns its argument."
  [x] x)
nil

4. 枚举Java对象属性和方法
(clojure.contrib.repl-utils/show obj)
user=> (show java.util.HashMap)
===  public java.util.HashMap  ===
[ 0] ()
[ 1] (Map)
[ 2] (int)
[ 3] (int,float)
[ 4] clear : void ()
[ 5] clone : Object ()
[ 6] containsKey : boolean (Object)
其他省略不列出
说明:由于Clojure对象都是Java对象,因此也可以使用show函数来查看Clojure形式内部的Java API。如
user=> (show #{})
原创粉丝点击