首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从IronRuby调用C# IEnumerable

如何从IronRuby调用C# IEnumerable
EN

Stack Overflow用户
提问于 2011-05-24 06:06:57
回答 1查看 341关注 0票数 4

我有一个C#方法:

代码语言:javascript
复制
  public static IEnumerator getPixels(Picture picture) {
    for (int x=0; x < picture.width; x++) {
      for (int y=0; y < picture.height; y++) {
    yield return picture.getPixel(x, y);
      }
    }
  }

我可以在IronPython中将其称为fine:

代码语言:javascript
复制
for pixel in getPixels(pic):
    r, g, b = getRGB(pixel)
    gray = (r + g + b)/3
    setRGB(pixel, gray, gray, gray)

但我不知道如何从IronRuby调用它:

代码语言:javascript
复制
Myro::getPixels(pic) do |pixel|
    r, g, b = Myro::getRGB pixel
    gray = (r + g + b)/3
    Myro::setRGB(pixel, gray, gray, gray)
end

我得到的只有Graphics+<getPixels>c__Iterator0.

我需要做什么才能真正获得IronRuby中的每个像素并对其进行处理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-25 05:50:33

来自Jimmy Schementi:

http://rubyforge.org/pipermail/ironruby-core/2011-May/007982.html

如果将getPixels的返回类型更改为IEnumerable,则可以执行以下操作:

代码语言:javascript
复制
Myro::getPixels(pic).each do |pixel|
    ...
end

可以说,它应该是IEnumerable而不是IEnumerator,因为IEnumerable.GetEnumerator()会给你一个IEnumerator。

您的代码示例将一个闭包传递给getPixels方法,该方法将被忽略(所有的Ruby方法在语法上都接受一个块/闭包,并且它们可以选择使用它),并返回IEnumerator。

今天的IronRuby不支持将Ruby的Enumerable模块映射到IEnumerator对象,因为从公共API返回IEnumerator而不是IEnumerable是一件很尴尬的事情,但是既然IronPython为支持它设置了一个优先权,我们应该研究一下它。已打开http://ironruby.codeplex.com/workitem/6154

~吉米

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6103587

复制
相关文章

相似问题

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