3.12 void 与 undefined

有些过程或表达式形式无需产生结果值。例如,调用过程 display 只是为了其写入到输出的副作用。此时的结果值一般为打印作 #<void> 的特殊常量当表达式的结果只是简单的 #<void> 时,REPL 不会打印任何东西。

过程 void 接受任意数量的参数并返回 #<void>。 (也就是说,标识符 void 被绑定到了一个返回 #<void> 的过程上,而非直接绑定到 #<void>。)

例如:
> (void)
> (void 1 2 3)
> (list (void))

'(#<void>)

常量 undefined 打印为 #<undefined>,当某个引用的值不可用时, 它通常作为其结果来使用。在 6.1 版之前的 Racket 中,过早地引用局部绑定会产生 #<undefined>;而现在过早的引用则会触发一个异常。

undefined 的结果也可以在某些使用 shared 形式的情况下产生。

(define (fails)
  (define x x)
  x)

 

> (fails)

x: undefined;

 cannot use before initialization