我已经看到 racket 中的一些函数或数据结构使用关键字 (#:foo
),但我无法想象出我自己的函数来使用它们。 racket 文档只是松散地定义了关键字类似于符号,并且有点像这样,但是编写一个应该将关键字作为参数的函数只会导致以下错误:关键字后缺少参数表达式
,这让我相信关键字与符号完全不同,因为它们不能作为值传递(除非被引用)。
我最熟悉的例子是match
:
(...
(match foo
[n #:when (< 10 n) "foo is greater than 10"]
[_ "undefined"]))
所以我的问题是:如何创建一个函数或任何能够像上例中那样采用关键字的函数?
最佳答案
将关键字声明为过程参数定义的一部分,例如:
(define (my-sort lst #:reverse reversed? #:comparator cmp)
(if reversed?
(reverse (sort lst cmp))
(sort lst cmp)))
(my-sort '(1 5 2 3 4) #:comparator > #:reverse #t)
=> '(1 2 3 4 5)
(my-sort '(1 5 2 3 4) #:reverse #f #:comparator >)
=> '(5 4 3 2 1)
正如@uselpa 在评论中提到的,这里是 documentation 中的相关部分.
关于racket - 你如何制作一个在 Racket 中使用关键字的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25909504/