FromPyObject
предназначен для использования типами, которые могут быть извлечены из мира Python. Вот почему я думаю, что вы пытались написать fn to_blocks(list: Vec
вместо fn to_blocks(list: Vec
. Если это так, давайте перейдем к цепочке реализации.
FromPyObject
имеет реализацию по умолчанию для any & amp; T, которая реализует PyTryFrom , а PyTryFrom
имеет реализацию по умолчанию для любого T, который реализует PyTypeInfo . [pyclass]
реализует PyObjectAlloc
или PyObjectWithFreeList
в соответствии с методом impl_class
, и обе черты имеют ограниченную черту PyTypeInfo
. Следовательно, ваш класс / структура будет отлично работать со ссылками, например :
#[pyfunction]
fn to_blocks(list: Vec<&Block>) -> Vec
Вы можете увидеть в официальной документации это объяснение в обобщенном виде.
BLOCKQUOTE>
FromPyObject
реализован различными типами, которые могут быть извлечены из объекта Python , ссылка .
Unity 2.0 будет иметь метод IsRegistered
, который можно использовать, чтобы узнать, был ли тип зарегистрирован в контейнере.
Первая бета-версия Unity 2.0 доступна на Codeplex с 10 февраля. См. Примечания к выпуску и загрузите его здесь; http://unity.codeplex.com/wikipage?title=Unity2%20Beta1
ОБНОВЛЕНИЕ:
Скачал и протестировал Unity 2.0 beta 1 27 февраля 2010 года, и на данный момент она еще не готова к производству. Если вы используете Unity 1.2 сегодня, вам придется проделать большую работу, чтобы заставить Unity 2.0 работать из-за неполного (?) Интерфейса IUnityContainer. Итак, если вы хотите, чтобы метод IsRegistered работал сегодня, вы можете создать такой метод расширения:
public static class UnityContainerExtensions
{
public static bool IsRegistered<T>(this IUnityContainer container)
{
try
{
container.Resolve<T>();
return true;
}
catch
{
return false;
}
}
}
Обратите внимание, что я не использую здесь ResolveAll
. Причина в том, что ResolveAll
не будет возвращать регистрацию по умолчанию (без имени), как указано в документации Unity:
Этот метод полезен, если вы зарегистрировали несколько типов с одним и тем же типом, но разные имена.
Имейте в виду, что этот метод НЕ возвращает экземпляр для регистрации по умолчанию (без имени).
Ваша только другая опция (в настоящее время) состоит в том, чтобы использовать ResolveAll<T>()
и перечислите результаты.