我有一个C#方法:
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:
for pixel in getPixels(pic):
r, g, b = getRGB(pixel)
gray = (r + g + b)/3
setRGB(pixel, gray, gray, gray)但我不知道如何从IronRuby调用它:
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中的每个像素并对其进行处理?
发布于 2011-05-25 05:50:33
来自Jimmy Schementi:
http://rubyforge.org/pipermail/ironruby-core/2011-May/007982.html
如果将getPixels的返回类型更改为IEnumerable,则可以执行以下操作:
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。
~吉米
https://stackoverflow.com/questions/6103587
复制相似问题