私はcpython
クレートを使用してPythonモジュールを作成するために、カップルのチュートリアルを見たが、時に建物それでもエラーがありました:別のクレートで定義されたマクロを使用するにはどうすればよいですか?
extern crate cpython;
use cpython::{PyObject, PyResult, Python, PyTuple, PyDict, ToPyObject, PythonObject};
fn add_two(py: Python, args: &PyTuple, _: Option<&PyDict>) -> PyResult<PyObject> {
match args.as_slice() {
[ref a_obj, ref b_obj] => {
let a = a_obj.extract::<i32>(py).unwrap();
let b = b_obj.extract::<i32>(py).unwrap();
let mut acc:i32 = 0;
for _ in 0..1000 {
acc += a + b;
}
Ok(acc.to_py_object(py).into_object())
},
_ => Ok(py.None())
}
}
py_module_initializer!(example, |py, module| {
try!(module.add(py, "add_two", py_fn!(add_two)));
Ok(())
});
私が手:
私はそれを得るのですかerror: macro undefined: 'py_module_initializer!'
?私は錆1.12を使用しています。その他のエラーの
UPD
- (答えのように)
#[macro_use]
を追加する必要があり - からexamples here
scan!()を使用してu8を読み取ったときに["マクロが未定義]となる可能性があります(http://stackoverflow.com/questions/38396104/macro-undefined-when-reading-u8-using-scan) – mcarton