如何制作一个在球拍中使用关键字的功能

时间:2014-09-18 09:53:05

标签: racket

我已经在球拍使用关键字(#:foo)中看到了一些功能或数据结构,但我还没有能够召唤出自己的功能来使用它们。球拍文档只是松散地定义了关键字与符号类似,而sorta只是将其留在那里,但是编写一个应该将关键字作为参数的函数只会导致以下错误:missing argument expression after keyword这让我相信关键词并不像符号一样,因为它们不能作为值传递(除非引用)。

我最熟悉的使用关键字的示例是match

(...    
  (match foo
    [n #:when (< 10 n) "foo is greater than 10"]
    [_ "undefined"]))

所以我的问题是:如何创建一个函数或任何能够获取关键字的函数,如上例所示?

1 个答案:

答案 0 :(得分:4)

将关键字声明为过程参数定义的一部分,例如:

(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中的相关部分。