宏使用dot.notation来获取Racket

时间:2016-08-25 12:12:25

标签: macros scheme racket

对于结构及其实例定义如下:

(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

0 个答案:

没有答案