是否可以在球拍中同时获取对象的所有字段?
我想基本上将对象转换为哈希表,字段名称为键,字段值为值。
我找到了一个函数(field-names obj),但后来我不知道如何使用返回的字段名来从obj中获取值。函数get-field
可用于获取字段的值,但我不知道如何将其与值一起使用:
> (define x% (class object% (init-field x y) (super-new)))
> (define obj (make-object x% 1 2))
> (get-field x obj)
1
> (field-names obj)
'(y x)
> (define field-name (second (field-names obj)))
> field-name
'x
> (get-field field-name obj)
get-field: given object does not have the requested field
field name: field-name
object: (object:x% ...)
errortrace...:
context...:
/usr/lib/racket/collects/racket/private/class-internal.rkt:4906:0: obj-error29
/usr/lib/racket/collects/racket/private/misc.rkt:87:7
答案 0 :(得分:6)
这里有一些代码可以帮助您入门
#lang racket
> (define x% (class object% (inspect #f) (init-field x y) (super-new)))
> (define obj (make-object x% 1 2))
> (let-values (((name field-cnt field-name-list field-accessor field-mutator super-class skipped)
(class-info x%)))
(for/hash ((name field-name-list)
(idx field-cnt))
(values name (field-accessor obj idx))))
'#hash((x . -1) (y . 0))
您可能希望将检查员从#f更改为不易受攻击的内容,但可以根据您的需要打开。阅读一般的班级信息和检查员。