可选的struct字段

Bla*_*ble 4 struct racket

我搜索了Racket(语言;非类型)的文档,并且无法确定是否可以为非可变结构提供可选参数.我希望能够做到:

(struct q-a-website (name interest-value #syntax? some-optional-field))
... (q-a-website "stack-overflow" 42 "My name is Jon Skeet") ...
... (q-a-website "quora" -inf.0) ...
Run Code Online (Sandbox Code Playgroud)

在这个伪示例中,#syntax?只是一个占位符,我怀疑可能存在一些特殊语法,以使以下字段可选.有没有办法让你的日常,不可变,一般的结构在基础Racket中有可选参数?

澄清:如果在没有可选参数的情况下创建结构,则使用必须在创建时提供的默认值填充该结构.在这种情况下,该信息必须包含在(可能名称不详的)#syntax?块内.

(注意:我struct对这个问题中包含标签有所保留,因为它提到了Racket不属于的C系列语言......)

Joh*_*nts 5

我认为最简单的方法就是创建一个具有可选参数的"构造函数",如下所示:

#lang racket

(struct q-a-website (name interest-value optional-field))

;; make a q-a-website
(define (make-q-a-website name interest-value [optional-field #f])
  (q-a-website name interest-value optional-field))

;; try making it with and without the optional argument:
(make-q-a-website "stack-overflow" 42 "My name is Jon Skeet")
(make-q-a-website "quora" -inf.0)
Run Code Online (Sandbox Code Playgroud)

Racket还有一个完整的类系统,几乎可以想象的一切.但是,对于这个用途,我想我就是这样做的.