首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pyd中实现迭代器

在pyd中实现迭代器
EN

Stack Overflow用户
提问于 2016-04-07 12:55:03
回答 1查看 108关注 0票数 4

我试图为一个用pyd.wrap_class包装的D类提供python支持。根据文档(wrappinghttp://pyd.readthedocs.org/en/latest/classes.html#iterator-wrapping),next方法应该将null返回到信号终止。

下面是我的最小D示例:

代码语言:javascript
复制
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测试代码调用它。

代码语言:javascript
复制
for item in IteratorTest() :
    print item

打印给我一个永无休止的None流。有人知道我在这里做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 10:23:38

多亏了DejanLekic,我找到了这个问题的解决方案。正确的实现是(注意_next()方法的更改签名):

代码语言:javascript
复制
import pyd.pyd;
import pyd.class_wrap;
import deimos.python.object;

class IteratorTest
{
    IteratorTest _iter()
    {
        return this;
    }

    PyObject *_next()
    {
        return null;
    }

}

extern(C) void PydMain() {
    module_init();

    wrap_class!(
        IteratorTest,
        Def!(IteratorTest._iter, PyName!("__iter__")),
        Def!(IteratorTest._next, PyName!("next"))
    );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36476837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档