Hi,<br><br>I've been using IronPython for a few months now, and I'm really enjoying it. Thanks for all the hard work that's gone into it.<br><br>I recently ran across an issue, and I wondered if anyone else has seen it. I think it's probably a bug, but I couldn't find a bug report, either.
<br><br>Basically, if there is a CLR class that takes an array as its only constructor argument, IronPython always tries to call it using params. For example, if I compile this to ParamCall.dll:<br><br><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">
<span style="font-family: courier new,monospace;">// ParamCall.cs</span><br><span style="font-family: courier new,monospace;"></span><br><span style="font-family: courier new,monospace;">using System;</span><br><span style="font-family: courier new,monospace;">
</span><br><span style="font-family: courier new,monospace;">namespace ParamCall</span><br><span style="font-family: courier new,monospace;">{</span><br><span style="font-family: courier new,monospace;"> public class ParamCall
</span><br><span style="font-family: courier new,monospace;"> {</span><br><span style="font-family: courier new,monospace;"> private string[] args;</span><br><span style="font-family: courier new,monospace;"></span>
<br><span style="font-family: courier new,monospace;"> public ParamCall(string[] args)</span><br><span style="font-family: courier new,monospace;"> {</span><br><span style="font-family: courier new,monospace;">
this.args = args;</span><br><span style="font-family: courier new,monospace;"> }</span><br><span style="font-family: courier new,monospace;"></span><br><span style="font-family: courier new,monospace;">
public string Joined()</span><br><span style="font-family: courier new,monospace;"> {</span><br><span style="font-family: courier new,monospace;"> return String.Join(",", args);</span><br>
<span style="font-family: courier new,monospace;"> }</span><br><span style="font-family: courier new,monospace;"> }</span><br><span style="font-family: courier new,monospace;">}</span><br><span style="font-family: courier new,monospace;">
</span></blockquote><span style="font-family: courier new,monospace;"><br></span>And I call it using this script:<br><br><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">
<span style="font-family: courier new,monospace;"># paramcall.py</span><br><span style="font-family: courier new,monospace;"></span><br><span style="font-family: courier new,monospace;">import clr</span><br><span style="font-family: courier new,monospace;">
clr.AddReference('ParamCall')</span><br><span style="font-family: courier new,monospace;"></span><br><span style="font-family: courier new,monospace;">from ParamCall import ParamCall</span><br><span style="font-family: courier new,monospace;">
from System import Array</span><br><span style="font-family: courier new,monospace;"></span><br><span style="font-family: courier new,monospace;">args = Array[str]( ['a', 'b', 'c'] )</span><br><span style="font-family: courier new,monospace;">
print 'args =', args</span><br><span style="font-family: courier new,monospace;"></span><br><span style="font-family: courier new,monospace;">print 'creating ParamCall object:'</span><br><span style="font-family: courier new,monospace;">
pc = ParamCall(args)</span><br><span style="font-family: courier new,monospace;">print 'pc.Joined() =>', pc.Joined()</span><br><span style="font-family: courier new,monospace;"></span><br><span style="font-family: courier new,monospace;">
print</span><br><span style="font-family: courier new,monospace;"></span></blockquote><span style="font-family: courier new,monospace;"><br></span>I get these results.<br><br><span style="font-family: courier new,monospace;">
</span><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote"><span style="font-family: courier new,monospace;">C:\home\eric\src\ase\Lse.Net>IronPython\ipy
paramcall.py</span><br><span style="font-family: courier new,monospace;">args = System.String[]('a', 'b', 'c')</span><br><span style="font-family: courier new,monospace;">creating ParamCall object:
</span><br><span style="font-family: courier new,monospace;">Traceback (most recent call last):</span><br><span style="font-family: courier new,monospace;"> File C:\home\eric\src\ase\Lse.Net\paramcall.py, line 7, in Initialize
</span><br><span style="font-family: courier new,monospace;"> File , line 0, in __import__##4</span><br><span style="font-family: courier new,monospace;"> File C:\home\eric\src\ase\Lse.Net\ParamCall.py, line 15, in Initialize
</span><br><span style="font-family: courier new,monospace;"> File , line 0, in NonDefaultNew##54</span><br><span style="font-family: courier new,monospace;">TypeError: ParamCall() takes exactly 1 argument (3 given)</span>
<br><span style="font-family: courier new,monospace;"></span></blockquote><span style="font-family: courier new,monospace;"><br></span>I have also tried wrapping the arguments in a tuple and calling it like ParamCall( *(args,) ), but the results are the same.
<br><br> If anyone has any suggestions for work-arounds or clues as to what I'm doing wrong, I'd be glad to hear them.<br><br>Thanks,<br><br>-- <br>Eric Rochester<br><br>