Используя Мгновенный и Длительность из нового API Java 8,
Instant start = Instant.now();
Thread.sleep(5000);
Instant end = Instant.now();
System.out.println(Duration.between(start, end));
,
PT5S
На какой версии PyO3 вы работаете? Ваш код работает для меня на 0.5.3
и 0.6.0-alpha.1
.
Из-за этого я не могу проверить это, но я думаю, что вам нужно вернуть
FromPyObject
предназначен для использования типами, которые могут быть извлечены из мира Python. Вот почему я думаю, что вы пытались написать fn to_blocks(list: Vec<Block>) -> Vec<i32>
вместо fn to_blocks(list: Vec<i32>) -> Vec<Block>
. Если это так, давайте перейдем к цепочке реализации.
FromPyObject
имеет реализацию по умолчанию для any & amp; T, которая реализует PyTryFrom , а PyTryFrom
имеет реализацию по умолчанию для любого T, который реализует PyTypeInfo . [pyclass]
реализует PyObjectAlloc
или PyObjectWithFreeList
в соответствии с методом impl_class
, и обе черты имеют ограниченную черту PyTypeInfo
. Следовательно, ваш класс / структура будет отлично работать со ссылками, например :
#[pyfunction]
fn to_blocks(list: Vec<&Block>) -> Vec<i32>
Вы можете увидеть в официальной документации это объяснение в обобщенном виде.
BLOCKQUOTE>
FromPyObject
реализован различными типами, которые могут быть извлечены из объекта Python , ссылка .
Похоже, что атрибут pyfunction
генерирует код, который требует, чтобы возвращаемый тип реализовывал черту FromPyObject
. Хотя существует полная реализация FromPyObject for Vec<T> where T: FromPyObject
, похоже, что код, сгенерированный для атрибута pyclass
, не включает реализацию FromPyObject
для вашего типа Block
.
Так как я незнаком с PyO3, за исключением нескольких минут, которые я только посмотрел на его API-документацию, чтобы подтвердить этот ответ, я не уверен, как вам лучше получить FromPyObject
реализацию - возможно, есть derive
за это?