我不理解的是似乎存在递归定义;这来自于MicroPython/objtype.c。
typedef struct _mp_obj_type_t mp_obj_type_t;
const mp_obj_type_t mp_type_type = { // <-- SAME SYMBOL DEFINED HERE . . .
{ &mp_type_type }, // <-- IS USED HERE
.name = MP_QSTR_type,
.print = type_print,
.make_new = type_make_new,
.call = type_call,
.unary_op = mp_generic_unary_op,
.attr = type_attr,
};
.<some_field>
指定的字段我理解了(请参见第一句中的链接)。
但是"递归"初始化是什么意思呢?
在MicroPython代码中还有其他使用这种语法的实例:
const mp_obj_type_t pyb_led_type = {
{ &mp_type_type }, <-- SAME SYMBOL AS ABOVE
.name = MP_QSTR_LED,
.print = led_obj_print,
.make_new = led_obj_make_new,
.locals_dict = (mp_obj_t)&led_locals_dict,
};
这更有意义:结构体pyb_led_type
是使用结构体mp_type_type
中设置的默认值进行初始化的,并且某些字段已从默认值更改。
但是const mp_obj_type_t mp_type_type
是什么意思?
结构体mp_type_type
默认为结构体mp_type_type
的值......结构体mp_type_type
......?
预处理输出与.c
相同。
这里是结构体的一些字段。
struct _mp_obj_type_t {
// A type is an object so must start with this entry, which points to mp_type_type.
mp_obj_base_t base;
// The name of this type.
qstr name;
// Corresponds to __repr__ and __str__ special methods.
mp_print_fun_t print;
...
};
struct _mp_obj_base_t {
const mp_obj_type_t *type MICROPY_OBJ_BASE_ALIGNMENT;
};
typedef struct _mp_obj_base_t mp_obj_base_t;
mp_obj_type_t
中的一个字段是指针,并且它被初始化为指针值。 - melpomenevoid * p = &p;
相同。 - alkstruct _mp_obj_type_t
的定义是什么?它似乎创建了一个包含指向自身的指针的结构体,用于某种用途。我很好奇这是如何使用的,为什么会有这种指向自身的指针。我无法想象出为什么这种自引用对象会有用,但这可能是因为我缺乏想象力。 - Richard Chambers