在Racket中,如何在编译时还不知道字段名的情况下访问对象的字段?
我想写一个函数,在给定对象及字段名的情况下,能够访问对象的任意字段:
#lang racket
(define (get-field* field-name obj)
(eval `(get-field ,field-name obj)))
(define obj (new (class object%
(field [i-want-this "value"])
(super-new))))
(define field-i-want 'i-want-this)
(get-field* field-i-want obj)
在上面的示例中,我希望最终结果为"value",但却得到一个错误:
get-field: unbound identifier;
also, no #%app syntax transformer is bound
at: get-field
in: (get-field i-want-this obj)
context...:
body of "./get-field.rkt"
是否有办法写出一个可用的 get-field*?理想情况下,希望它对任意对象的任意字段都能起作用。
解决方案
如果你在运行时才知道字段的名字,你需要使用 dynamic-get-field。
(define field-i-want 'i-want-this)
(dynamic-get-field field-i-want obj) ; => "value"
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。