【发布时间】:2019-06-10 07:49:27
【问题描述】:
我是 Rust 和 PyO3(来自 Python)的新手,所以这对更有经验的人来说可能很明显。
我在 PyO3 中声明了一个 pyclass 结构。
#[pyclass]
struct Block {
start: i32,
stop: i32,
}
然后我在 rust 函数中使用 Block,该函数接受 Block 的向量并输出 int 的向量(签名如下)
#[pyfunction]
fn from_blocks(block_list: Vec<Block>) -> Vec<i32>
当我使用nightly-x86_64-apple-darwin 编译时,我收到以下错误:
#[pyfunction]
^^^^^^^^^^^^^ the trait `pyo3::FromPyObject<'_>` is not implemented for `std::vec::Vec<Block>`
我该如何解决这个问题?
编辑: 曹是对的。我在追溯错误时犯了一个错误。 之前写过
然后我在一个 rust 函数中使用 Block,该函数接受一个 int 向量并输出一个 Block 向量(签名如下)
#[pyfunction]
fn to_blocks(list: Vec<i32>) -> Vec<Block>
但实际的冒犯功能是:
#[pyfunction]
fn from_blocks(block_list: Vec<Block>) -> Vec<i32>
我已更新问题以使其更清楚。
【问题讨论】:
-
抱歉给大家带来了困惑。 @Caio 直观地发现违规函数具有反向签名。结果我更新了这个问题。