我正在學習如何在Python中嵌入Rust函數,並且如果我的輸入是int
s,但沒有列表,則一切正常。將Python列表傳遞給嵌入的Rust函數
如果我lib.rs
文件是:
#[no_mangle]
pub extern fn my_func(x: i32, y: i32) -> i32 {
return x + y;
}
我可以用這個如下:如果我改變
In [1]: from ctypes import cdll
In [2]: lib = cdll.LoadLibrary("/home/user/RustStuff/embed/target/release/libembed.so")
In [3]: lib.my_func(5,6)
Out[3]: 11
但是我lib.rs
到:
#[no_mangle]
pub extern fn my_func(my_vec: Vec<i32>) -> i32 {
let mut my_sum = 0;
for i in my_vec {
my_sum += i;
}
return my_sum;
}
我可以不再在Python中使用它(編譯的很好):
In [1]: from ctypes import cdll
In [2]: lib = cdll.LoadLibrary("/home/user/RustStuff/embed/target/release/libembed.so")
In [3]: lib.my_func([2,3,4])
---------------------------------------------------------------------------
ArgumentError Traceback (most recent call last)
<ipython-input-3-454ffc5ba9dd> in <module>()
----> 1 lib.my_func([2,3,4])
ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1
的原因,不過,我覺得這可能是工作是Python的list
和鏽病的Vec
是兩個動態數組,但顯然我在這裏失去了一些東西......
爲什麼我嘗試不工作?我應該怎麼做才能解決它?