-
Notifications
You must be signed in to change notification settings - Fork 21
/
03.07 关键字(Keyword)
35 lines (26 loc) · 1.53 KB
/
03.07 关键字(Keyword)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
3.7 关键字(Keyword)
一个关键字值是类似于一个符号(见《符号(Symbols)》),但它的印刷形式是用前缀#:。
例如:
> (string->keyword "apple")
'#:apple
> '#:apple
'#:apple
> (eq? '#:apple (string->keyword "apple"))
#t
更确切地说,关键字类似于标识符;以同样的方式,可以引用标识符来生成符号,可以引用关键字来生成值。在这两种情况下都使用同一术语“关键字”,但有时我们使用关键字值更具体地引用引号关键字表达式或使用string->keyword程序的结果。一个不带引号的关键字不是表达式,只是作为一个不带引号的标识符不产生符号:
例如:
> not-a-symbol-expression
not-a-symbol-expression: undefined;
cannot reference undefined identifier
> #:not-a-keyword-expression
eval:2:0: #%datum: keyword used as an expression
in: #:not-a-keyword-expression
尽管它们有相似之处,但关键字的使用方式不同于标识符或符号。关键字是为了使用(不带引号)作为参数列表和在特定的句法形式的特殊标记。运行时的标记和枚举,而不是关键字用符号。下面的示例说明了关键字和符号的不同角色。
例如:
> (define dir (find-system-path 'temp-dir)) ; 不是符号 '#:temp-dir
> (with-output-to-file (build-path dir "stuff.txt")
(lambda () (printf "example\n"))
; 可选项#:mode参数,可以是 'text or 'binary
#:mode 'text
; 可选项#:exists参数,可以是 'replace, 'truncate, ...
#:exists 'replace)