<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style>@font-face {
        font-family: Calibri;
}
@font-face {
        font-family: Tahoma;
}
@page WordSection1 {margin: 1.0in 1.0in 1.0in 1.0in; }
P.MsoNormal {
        MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman","serif"; FONT-SIZE: 12pt
}
LI.MsoNormal {
        MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman","serif"; FONT-SIZE: 12pt
}
DIV.MsoNormal {
        MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman","serif"; FONT-SIZE: 12pt
}
A:link {
        COLOR: blue; TEXT-DECORATION: underline
}
SPAN.MsoHyperlink {
        COLOR: blue; TEXT-DECORATION: underline
}
A:visited {
        COLOR: purple; TEXT-DECORATION: underline
}
SPAN.MsoHyperlinkFollowed {
        COLOR: purple; TEXT-DECORATION: underline
}
P.MsoAcetate {
        MARGIN: 0in 0in 0pt; FONT-FAMILY: "Tahoma","sans-serif"; FONT-SIZE: 8pt
}
LI.MsoAcetate {
        MARGIN: 0in 0in 0pt; FONT-FAMILY: "Tahoma","sans-serif"; FONT-SIZE: 8pt
}
DIV.MsoAcetate {
        MARGIN: 0in 0in 0pt; FONT-FAMILY: "Tahoma","sans-serif"; FONT-SIZE: 8pt
}
SPAN.BalloonTextChar {
        FONT-FAMILY: "Tahoma","sans-serif"
}
SPAN.EmailStyle19 {
        FONT-FAMILY: "Calibri","sans-serif"; COLOR: #1f497d
}
.MsoChpDefault {
        FONT-FAMILY: "Calibri","sans-serif"
}
</style><style id="owaParaStyle">P {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
</style>
</head>
<body lang="EN-US" link="blue" vlink="purple" fPStyle="1" ocsi="0">
<div style="FONT-FAMILY: Tahoma; DIRECTION: ltr; COLOR: #000000; FONT-SIZE: 13px">
<div>About documentation, the bottom of <a href="http://ironpython.net/documentation/dotnet/">
http://ironpython.net/documentation/dotnet/</a>&nbsp;has this placeholder :(</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;Appendix - Rules for Type parameter inference while invoking generic methods<br>
&nbsp;&nbsp;&nbsp;&nbsp;<font style="BACKGROUND-COLOR: #ffff00">TODO</font><br>
</div>
<div>&nbsp;</div>
<div>Jim, Dino had added tests for IronPython, and you should be able to leverage those for IronRuby</div>
<div>&nbsp;</div>
<div><a href="http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=3395">http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=3395</a>&nbsp; also tracks the issues with generic inference.</div>
<div>&nbsp;</div>
<div style="FONT-FAMILY: Times New Roman; COLOR: #000000; FONT-SIZE: 16px">
<hr tabindex="-1">
<div style="DIRECTION: ltr" id="divRpF885513"><font color="#000000" size="2" face="Tahoma"><b>From:</b> ironruby-core-bounces@rubyforge.org [ironruby-core-bounces@rubyforge.org] on behalf of Jim Deville [jdeville@microsoft.com]<br>
<b>Sent:</b> Friday, February 12, 2010 9:06 AM<br>
<b>To:</b> ironruby-core@rubyforge.org<br>
<b>Subject:</b> Re: [Ironruby-core] Calling a C# method with a byref parameter<br>
</font><br>
</div>
<div></div>
<div>
<div class="WordSection1">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: #1f497d; FONT-SIZE: 11pt">Generic type inference should work like it does in C#. I’ll get some more tests in there and get Jimmy to update the docs.</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: #1f497d; FONT-SIZE: 11pt"></span>&nbsp;</p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: #1f497d; FONT-SIZE: 11pt">JD</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: #1f497d; FONT-SIZE: 11pt"></span>&nbsp;</p>
<p class="MsoNormal"><b><span style="FONT-FAMILY: 'Tahoma','sans-serif'; FONT-SIZE: 10pt">From:</span></b><span style="FONT-FAMILY: 'Tahoma','sans-serif'; FONT-SIZE: 10pt"> ironruby-core-bounces@rubyforge.org [mailto:ironruby-core-bounces@rubyforge.org]
<b>On Behalf Of </b>Ryan Riley<br>
<b>Sent:</b> Thursday, February 11, 2010 9:56 AM<br>
<b>To:</b> ironruby-core@rubyforge.org<br>
<b>Subject:</b> Re: [Ironruby-core] Calling a C# method with a byref parameter</span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">On what types will IR be able to infer the types? Is that documented on the site and I just didn't see it?</p>
<div>
<p style="MARGIN-BOTTOM: 12pt" class="MsoNormal"><br clear="all">
Ryan Riley<br>
<br>
</p>
<div>
<p class="MsoNormal">On Thu, Feb 11, 2010 at 9:55 AM, Jim Deville &lt;<a href="mailto:jdeville@microsoft.com" target="_blank">jdeville@microsoft.com</a>&gt; wrote:</p>
<div>
<div>
<p class="MsoNormal"><span style="COLOR: #1f497d; FONT-SIZE: 11pt">That call actually should (usually) be able to infer the type. Please file a bug on codeplex that Generic Type inference isn’t working with ByRef types.</span></p>
<p class="MsoNormal"><span style="COLOR: #1f497d; FONT-SIZE: 11pt"></span>&nbsp;</p>
<p class="MsoNormal"><span style="COLOR: #1f497d; FONT-SIZE: 11pt">JD</span></p>
<p class="MsoNormal"><span style="COLOR: #1f497d; FONT-SIZE: 11pt"></span>&nbsp;</p>
<p class="MsoNormal"><b><span style="FONT-SIZE: 10pt">From:</span></b><span style="FONT-SIZE: 10pt">
<a href="mailto:ironruby-core-bounces@rubyforge.org" target="_blank">ironruby-core-bounces@rubyforge.org</a> [mailto:<a href="mailto:ironruby-core-bounces@rubyforge.org" target="_blank">ironruby-core-bounces@rubyforge.org</a>]
<b>On Behalf Of </b>Shay Friedman<br>
<b>Sent:</b> Thursday, February 11, 2010 6:53 AM<br>
<b>To:</b> <a href="mailto:ironruby-core@rubyforge.org" target="_blank">ironruby-core@rubyforge.org</a><br>
<b>Subject:</b> Re: [Ironruby-core] Calling a C# method with a byref parameter</span></p>
<div>
<div>
<p class="MsoNormal">&nbsp;</p>
<div>
<p class="MsoNormal">You should call generic methods a bit differently.&nbsp;</p>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">The next code works:</p>
<div>
<p class="MsoNormal">ret_val = c.method(:do_something_else).of(String).call(str)</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">Shay.</p>
</div>
<div>
<p style="MARGIN-BOTTOM: 12pt" class="MsoNormal">--------------------------------------------------------<br>
Shay Friedman | .NET Technologies Expert | Author of IronRuby Unleashed | Sela Technology Center<br>
Blog: <a href="http://IronShay.com" target="_blank">http://IronShay.com</a> | Twitter:
<a href="http://twitter.com/ironshay" target="_blank">http://twitter.com/ironshay</a>
</p>
<div>
<p class="MsoNormal">On Thu, Feb 11, 2010 at 4:44 PM, Michael Erasmus &lt;<a href="mailto:michaelerasmus@gmail.com" target="_blank">michaelerasmus@gmail.com</a>&gt; wrote:</p>
<p class="MsoNormal">Thanks Shay.</p>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">OK your code works. But my&nbsp;trouble seems to come in with the Generic method.&nbsp;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">When I do:</p>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">public class Class1</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp;{</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string DoSomething(ref string test)</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;test = test &#43; &quot;tamtamtam&quot;;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return &quot;return value&quot;;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string DoSomethingElse&lt;T&gt;(ref T test)</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return test.ToString();&nbsp;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp;}</p>
</div>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<p class="MsoNormal">and then call it from IR:</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<div>
<div>
<p class="MsoNormal">&gt;&gt;&gt; c = TestClass::Class1.new</p>
</div>
<div>
<p class="MsoNormal">=&gt; TestClass.Class1</p>
</div>
<div>
<p class="MsoNormal">&gt;&gt;&gt; c.do_something(&quot;Bla&quot;)</p>
</div>
<div>
<p class="MsoNormal">=&gt; ['return value', 'Blatamtamtam']</p>
</div>
<div>
<p class="MsoNormal">&gt;&gt;&gt; c.do_something_else(&quot;Bla&quot;)</p>
</div>
<div>
<div>
<p class="MsoNormal">Microsoft.Scripting.Core:0:in `Bind': Expression of type 'IronRuby.Builtins.Muta</p>
</div>
<div>
<p class="MsoNormal">bleString&amp;' cannot be used for parameter of type 'IronRuby.Builtins.MutableStrin</p>
</div>
</div>
<div>
<p class="MsoNormal">g' of method 'System.String DoSomethingElse[MutableString](IronRuby.Builtins.Mut</p>
</div>
<div>
<p class="MsoNormal">ableString ByRef)' (ArgumentError)</p>
</div>
<div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;from Microsoft.Scripting.Core:0:in `BindCore'</p>
</div>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;from :0</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">On Thu, Feb 11, 2010 at 4:12 PM, Shay Friedman &lt;<a href="mailto:shay.friedman@gmail.com" target="_blank">shay.friedman@gmail.com</a>&gt; wrote:</p>
<div>
<div>
<p class="MsoNormal">It returns another return value with the new ref value.</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">For example, if you have the next c# class:</p>
</div>
<div>
<div>
<p class="MsoNormal">public class Class1</p>
</div>
<div>
<p class="MsoNormal">{</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp;public string DoSomething(ref string test)</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp;{</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;test = test &#43; &quot;tamtamtam&quot;;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return &quot;return value&quot;;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp;}</p>
</div>
<div>
<p class="MsoNormal">}</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">This is the IronRuby code you can write to use it:</p>
</div>
<div>
<div>
<p class="MsoNormal">&gt;&gt;&gt; require 'c:\dev\TestApps\TestClass\TestClass\bin\Debug\TestClass.dll'</p>
</div>
<div>
<p class="MsoNormal">=&gt; true</p>
</div>
<div>
<p class="MsoNormal">&gt;&gt;&gt; c = Class1.new</p>
</div>
<div>
<p class="MsoNormal">=&gt; TestClass.Class1</p>
</div>
<div>
<p class="MsoNormal">&gt;&gt;&gt; str = &quot;hello&quot;</p>
</div>
<div>
<p class="MsoNormal">=&gt; &quot;hello&quot;</p>
</div>
<div>
<p class="MsoNormal">&gt;&gt;&gt; result = c.do_something(str)</p>
</div>
<div>
<p class="MsoNormal">=&gt; ['return value', 'hellotamtamtam']</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">Pay attention that the result variable is an array that contains the method return value as the first item and the ref value as the second parameter.</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">Shay.</p>
</div>
</div>
</div>
<p style="MARGIN-BOTTOM: 12pt" class="MsoNormal">--------------------------------------------------------<br>
Shay Friedman | .NET Technologies Expert | Author of IronRuby Unleashed | Sela Technology Center<br>
Blog: <a href="http://IronShay.com" target="_blank">http://IronShay.com</a> | Twitter:
<a href="http://twitter.com/ironshay" target="_blank">http://twitter.com/ironshay</a>
</p>
<div>
<div>
<div>
<p class="MsoNormal">On Thu, Feb 11, 2010 at 3:44 PM, Michael Erasmus &lt;<a href="mailto:michaelerasmus@gmail.com" target="_blank">michaelerasmus@gmail.com</a>&gt; wrote:</p>
</div>
</div>
<blockquote style="BORDER-BOTTOM: medium none; BORDER-LEFT: #cccccc 1pt solid; PADDING-BOTTOM: 0in; MARGIN: 5pt 0in 5pt 4.8pt; PADDING-LEFT: 6pt; PADDING-RIGHT: 0in; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in">
<div>
<div>
<p class="MsoNormal">Hi Everyone,</p>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">I'm trying to write a IronRuby script that interops with a a .NET assembly written in C#. &nbsp;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">It has a class that derives from a base class in the .NET assembly. One of the base class protected methods looks like this:</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<div>
<p class="MsoNormal">protected void OnNotifyPropertyChanged&lt;T&gt;(string name, ref T localmember, T value)</p>
</div>
<div>
<p class="MsoNormal">&nbsp;{</p>
</div>
<div>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ......</p>
</div>
<div>
<p class="MsoNormal">&nbsp;}</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">I can't for the life of me figure out how to call this method from IR in my derived class.</p>
</div>
<div>
<p class="MsoNormal">The documentation mentions that you can call&nbsp;<b>out </b>parameters without using them as arguments, but I can't seem to find anything about
<b>ref </b>params.</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">If I just try calling the method like this:</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">OnNotifyPropertyChanged(property_name, value, value)</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">I get this error:</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<div>
<p class="MsoNormal"><i>Microsoft.Scripting.Core:0:in `Bind': Expression of type 'IronRuby.Builtins.Muta</i></p>
</div>
<div>
<p class="MsoNormal"><i>bleString&amp;' cannot be used for parameter of type 'IronRuby.Builtins.MutableStrin</i></p>
</div>
<div>
<p class="MsoNormal"><i>g' of method 'Void #base#OnNotifyPropertyChanged[MutableString](System.String, I</i></p>
</div>
<div>
<p class="MsoNormal"><i>ronRuby.Builtins.MutableString ByRef, IronRuby.Builtins.MutableString)' (Argumen</i></p>
</div>
<div>
<p class="MsoNormal"><i>tError)</i></p>
</div>
<div>
<p class="MsoNormal"><i>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;from Microsoft.Scripting.Core:0:in `BindCore'</i></p>
</div>
<div>
<p class="MsoNormal"><i>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;from ./dynamic_event_item.rb:22:in `method_missing'</i></p>
</div>
<div>
<p class="MsoNormal"><i>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;from :0</i></p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">Am I missing something?</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">Thanks</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
<div>
<p class="MsoNormal">Michael Erasmus</p>
</div>
<div>
<p class="MsoNormal">&nbsp;</p>
</div>
</div>
</div>
<p class="MsoNormal">&nbsp;</p>
</div>
</div>
<p style="MARGIN-BOTTOM: 12pt" class="MsoNormal">_______________________________________________<br>
Ironruby-core mailing list<br>
<a href="mailto:Ironruby-core@rubyforge.org" target="_blank">Ironruby-core@rubyforge.org</a><br>
<a href="http://rubyforge.org/mailman/listinfo/ironruby-core" target="_blank">http://rubyforge.org/mailman/listinfo/ironruby-core</a></p>
</blockquote>
</div>
<p class="MsoNormal">&nbsp;</p>
</div>
<p style="MARGIN-BOTTOM: 12pt" class="MsoNormal"><br>
_______________________________________________<br>
Ironruby-core mailing list<br>
<a href="mailto:Ironruby-core@rubyforge.org" target="_blank">Ironruby-core@rubyforge.org</a><br>
<a href="http://rubyforge.org/mailman/listinfo/ironruby-core" target="_blank">http://rubyforge.org/mailman/listinfo/ironruby-core</a></p>
</div>
<p class="MsoNormal">&nbsp;</p>
</div>
</div>
</div>
</div>
<p style="MARGIN-BOTTOM: 12pt" class="MsoNormal"><br>
_______________________________________________<br>
Ironruby-core mailing list<br>
<a href="mailto:Ironruby-core@rubyforge.org" target="_blank">Ironruby-core@rubyforge.org</a><br>
<a href="http://rubyforge.org/mailman/listinfo/ironruby-core" target="_blank">http://rubyforge.org/mailman/listinfo/ironruby-core</a></p>
</div>
<p class="MsoNormal">&nbsp;</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p style="MARGIN-BOTTOM: 12pt" class="MsoNormal"><br>
_______________________________________________<br>
Ironruby-core mailing list<br>
<a href="mailto:Ironruby-core@rubyforge.org" target="_blank">Ironruby-core@rubyforge.org</a><br>
<a href="http://rubyforge.org/mailman/listinfo/ironruby-core" target="_blank">http://rubyforge.org/mailman/listinfo/ironruby-core</a></p>
</div>
<p class="MsoNormal">&nbsp;</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>