4
私はpyd.wrap_classでラップされたDクラスに、Pythonイテレータのサポートを提供しようとしています。ドキュメント(https://github.com/ariovistus/pyd/wiki/ClassWrap#Iterator_wrappingおよびhttp://pyd.readthedocs.org/en/latest/classes.html#iterator-wrapping)によれば、next
メソッドは、信号終了にnull
を返す必要があります。pydのイテレータを実装する
import pyd.pyd;
import pyd.pydobject;
import pyd.class_wrap;
class IteratorTest
{
IteratorTest _iter()
{
return this;
}
PydObject _next()
{
return null;
}
}
extern(C) void PydMain() {
module_init();
wrap_class!(
IteratorTest,
Def!(IteratorTest._iter, PyName!("__iter__")),
Def!(IteratorTest._next, PyName!("next"))
);
}
しかし、Pythonのテストコードでこれを呼び出す
for item in IteratorTest() :
print item
版画私None
の終わることのないストリーム:
は、ここに私の最小限のDの一例です。誰も私がここで間違っていることを知っていますか?
、 '_nextの署名は、()'メソッドは() '' PyObject *次でなければなりません。正しい署名を使用していない可能性がありますか? – DejanLekic
ええ、私はそれを試みましたが、PyObjectがどこに定義されているのか分かりません。 '' python;をインポートしようとすると、コンパイラはファイルが見つからないというエラーで失敗します。これが、私がhttp://pyd.readthedocs.org/en/latest/pydobject.htmlにある "PydObjectがPyObject *をラップする"ところの文書に従った理由です。 – harfel
https://github.com/ariovistus/pyd/blob/master/infrastructure/deimos/python/object.d - PyObjectが定義されている場所です。実際には – DejanLekic