对于结构及其实例定义如下:
(struct dog (name breed age))
(define mydog (dog "lassie" "collie" 5))
(来自https://learnxinyminutes.com/docs/racket/的例子)
获取结构字段的常用方法如下:
(dog-name mydog) ; => "lassie"
可以有一个宏,以便我们可以使用以下点表示法执行上述操作:
(mydog.name) ; => "lassie"
或者,可能不需要括号:
mydog.name ; => "lassie"
点此表示法的宏在此页面上使用:http://www.greghendershott.com/fear-of-macros/pattern-matching.html#%28part._hash..refs%29但我无法将其用于上述目的。我还在此页面上看到了结构宏的一些细节:Is struct a macro in Racket?
编辑:正如评论和https://docs.racket-lang.org/reference/reader.html?q=read-cdot#%28part._parse-cdot%29中所述,我尝试了读取cdot,但它不起作用:
#lang racket
(read-cdot #t)
(struct dog (name breed age))
(define mydog (dog "lassie" "collie" 5))
(dog-name mydog) ; works
mydog.dog-name ; does not work;
错误是:
mydog.dog-name: unbound identifier in module in: mydog.dog-name