[Ironruby-core] Difficulties grasping generics + IronRuby - any idea? (OpenXML)

Thibaut Barrère thibaut.barrere at gmail.com
Fri Nov 20 15:55:00 EST 2009


Hi Ryan,

You can't call a C# extension method off of the object. You might try
> creating a mixin to add a method_missing to catch and call the appropriate
> extensions. Otherwise, I think you have to call them as static members, e.g.
> Enumerable.First.Of(Sheet).call(b). That looks horrifying, I know. I don't
> have IR available on this machine, or I would try it myself. Let me know how
> that goes. This seems like it will be a fairly common problem for things
> like LINQ, PFx and Rx. Maybe we can come up with a simple, one-size-fits-all
> solution?


yikes :) I was pretty sure something like that was involved.

I think I'll try the static version first, see if it works.

thanks for the hint, I'll keep you posted :)

-- Thibaut


>
>
> Ryan Riley
>
> Email: ryan.riley at panesofglass.org
> LinkedIn: http://www.linkedin.com/in/ryanriley
> Blog: http://wizardsofsmart.net/
> Website: http://panesofglass.org/
>
>
> On Fri, Nov 20, 2009 at 9:17 AM, Thibaut Barrère <
> thibaut.barrere at gmail.com> wrote:
>
>> Hi,
>>
>> I'm testing out the OpenXML SDK with IronRuby (0.9.2). Turns out it's full
>> of generics in there, a good play field.
>>
>> Here I'm trying to use the API to retrieve a list of sheets in an existing
>> xslx.
>>
>> I'm having a hard-time understanding why I can't call "b.first" in the
>> next snippet (full version at http://gist.github.com/239555):
>>
>> doc = SpreadsheetDocument.open('docs/single-cell.xlsx', false)
>>
>>
>>
>>
>>
>>
>>
>> a = doc.workbook_part.workbook.method(:get_first_child).of(Sheets).call
>>
>>
>>
>> puts a
>>
>>
>>
>> # -> DocumentFormat.OpenXml.Spreadsheet.Sheets
>>
>>
>>
>>
>>
>>
>>
>> b = a.method(:elements).of(Sheet).call
>>
>>
>>
>> puts b
>>
>>
>>
>> # -> DocumentFormat.OpenXml.OpenXmlElementList+<OfType>d__0`1[DocumentFormat.OpenXml.Spreadsheet.Sheet]
>>
>>
>>
>>
>>
>>
>>
>> # b.first or anything similar fails
>>
>>
>>
>> *
>>
>> *
>>
>> It turns out that b.methods shows a "to_a" method is available, then I can
>> do :
>>
>> puts b.to_a.first # woot!
>>
>>
>>
>> # -> DocumentFormat.OpenXml.Spreadsheet.Sheet
>>
>>
>>
>>
>> So my questions are:
>> - why can't I call b.first ? (maybe there's something obvious I didn't see
>> - I assume it's probably that)
>> - are there better ways of writing this ?
>>
>> And if you are interested to follow (I really need to wrap some ruby sugar
>> around all this to make it easier to work with), I'll push my experiments
>> here:
>>
>> http://github.com/thbar/openxml-labs
>>
>> thanks,
>>
>> Thibaut
>> --
>> http://www.learnivore.com
>>
>> _______________________________________________
>> Ironruby-core mailing list
>> Ironruby-core at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>
>>
>
> _______________________________________________
> Ironruby-core mailing list
> Ironruby-core at rubyforge.org
> http://rubyforge.org/mailman/listinfo/ironruby-core
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20091120/a82f035c/attachment-0001.html>


More information about the Ironruby-core mailing list