# 使用宏(macro)使代码更精简 - `get_every_execution_gadgets`可以获得一个Vec。每开发一个ExecutionGadget,都要在其定义处加上gadget的new函数。这样我们在core里或者witness生成的地方就可以直接调用它获取所有的ExecutionGadget。 - `generate_execution_gadget_test_circuit`在每个execution gadget文件里的`mod test`中使用,可以帮助你定义一个TestCircuit并生成相应的接口实现代码。 - `prepare_witness_and_prover`在每个execution gadget文件里的测试函数`fn text_xx()`中使用,能生成witness并将其放入一个TestCircuit的实例中,然后生成对应的MockProver。 - `extract_lookup_expression`对于我们定义的enum `LookupEntry`,可以展开其中的成员。不过必须要输入表示其类型的字符串。例如`let (a,b,c,d,e,f,g,h) = extract_lookup_expression!(state, lookup_entry);` 其中state是字符串。 - `assign_or_panic`是对于Witness表格中一个格子进行赋值。如果格子已经被赋值,则报错。多用于多功能列中,防止同一个格子被使用多次。