您的位置:首页 > 其它

clojure-基本语法-符号及关键字

2015-03-27 16:38 309 查看
一、创建:

Keyword:

关键字是一个内部字符串; 两个同样的关键字指向同一个对象; 通常被用来作为map的key。

Java代码


user=> (keyword 'foo)

:foo

user=> (keyword "foo")

:foo

user=> (keyword "user" "foo")

:user/foo

user=> (keyword "abc def")

:abc def

user=> (keyword "abcdef")

:abcdef

user=> (keyword "/abc/def/ghi")

:/abc/def/ghi

Symbol:

Symbol是用来给东西命名的. 这些名字是被限制在名字空间里面的,要么是指定的名字空间,要么是当前的名字空间.

Java代码


user=> (symbol 'foo)

foo

user=> (symbol "foo")

foo

user=> (symbol "clojure.core" "foo")

clojure.core/foo

user=> (symbol "abc def")

abc def

user=> (symbol "abcdef")

abcdef

二、用法:

name:

name函数接受一个参数,如果该参数为字符串,则直接返回该参数。如果不是字符串,则返回名称值。代码如下:

Java代码


user=> (name :foo)

"foo"

user=> (name 'x)

"x"

user=> (name "x")

"x"

intern:

intern函数有两个实现:(intern ns name)、(intern ns name val)。

根据命名空间ns中查找是否存在符号name,不存在,则创建;最有一个参数val作为值与符号进行绑定,代码如下:

Java代码


user=> (intern 'user 'x)

#'user/x

user=> x

#<Unbound Unbound: #'user/x>

user=> (intern 'user 'x "1")

#'user/x

user=> x

"1"

namespace:

namespace函数根据给定的符号、或者关键字返回所在的命名空间名称,如果当前没有,则返回nil,代码如下:

Java代码


user=> (symbol 'xx)

xx

user=> (namespace 'user/xxx)

"user"

user=> (namespace 'xxx)

nil

user=> (def x :val)

#'user/x

user=> (namespace 'x)

nil

user=> (namespace 'user/x)

"user"

三、检查:

keyword?、symbol?用于检查指定的参数是否为关键字、或者是符号,是则返回true,否则返回false。

Java代码


user=> (symbol? 'x)

true

user=> (symbol? "x")

false

user=> (keyword? 'x)

false

user=> (keyword? :x)

true

user=> (keyword? "x")

false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: