我试着做一个宏来定义ctypes.结构. 宏如下所示:
(defmacro struct [name fields]
`(defclass ~name [ctypes.Structure]
[-fields-
~(lfor i (range 0 (len fields) 2)
(tuple [
(str (get fields (+ i 1)))
(get fields i)))]))
我认为lfor表达式将生成一个元组列表,但是,当我使用macroexpand展开宏时,我发现生成的列表是一个列表列表,没有创建元组。宏扩展的结果如下:
=> (macroexpand '(struct Point [ctypes.c_int x ctypes.c_int y]))
HyExpression([
HySymbol('defclass'),
HySymbol('Point'),
HyList([
HySymbol('ctypes.Structure')]),
HyList([
HySymbol('-fields-'),
HyList([
HyList([
HyString('x'),
HySymbol('ctypes.c_int')]),
HyList([
HyString('y'),
HySymbol('ctypes.c_int')])])])])
我很困惑,lfor表达式中的元组似乎根本不起作用。你知道吗
由于我是一个海朗新手,我不熟悉的机制,宏观。经过几次尝试,我终于让它正常工作了,如下所示:
相关问题 更多 >
编程相关推荐