<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.0.6619.12">
<TITLE>Accessing IronRuby method from C#</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Tahoma">Greetings to the mighty IronRuby experts from a humble developer! :-)</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Tahoma">I am testing the latest CVS snapshot (v. 73, downloaded an hour ago) of IronRuby.</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Tahoma">We are evaluating IronRuby for possible usage in WPF project. </FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Tahoma">First, I want to test a simple case of defining a method in Ruby and calling the method later from C#.</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Tahoma">Below I copy a test program that tries this in two ways (methods AccessMethod1 and AccessMethod2). </FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Tahoma">Both attempts fail with exceptions that are written as comments in the code.</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Tahoma">I understand that the DLR and IronRuby are in a flux at the moment but I still suppose there must be some working way to perform such trivial interop task...?</FONT></SPAN></P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Tahoma">Thanks in advance!</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><B><FONT SIZE=2 FACE="Tahoma">Robert Brotherus<BR>
</FONT></B><FONT SIZE=2 FACE="Tahoma">Software architect<BR>
</FONT><B><FONT SIZE=2 FACE="Tahoma">Napa Ltd</FONT></B></SPAN>
</P>
<P><SPAN LANG="fi"><B><FONT SIZE=2 FACE="Tahoma">---------------------</FONT></B></SPAN>
</P>
<P><SPAN LANG="fi"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">using</FONT><FONT SIZE=2 FACE="Courier New"> System;</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">using</FONT><FONT SIZE=2 FACE="Courier New"> System.Collections.Generic;</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">using</FONT><FONT SIZE=2 FACE="Courier New"> System.Linq;</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">using</FONT><FONT SIZE=2 FACE="Courier New"> System.Text;</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">using</FONT><FONT SIZE=2 FACE="Courier New"> Microsoft.Scripting;</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">using</FONT><FONT SIZE=2 FACE="Courier New"> Microsoft.Scripting.Hosting;</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">using</FONT><FONT SIZE=2 FACE="Courier New"> Ruby.Runtime;</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">using</FONT><FONT SIZE=2 FACE="Courier New"> Ruby.Builtins;</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">namespace</FONT><FONT SIZE=2 FACE="Courier New"> IronRubyTests</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New">{</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">class</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">Program</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">private</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">IScriptEnvironment</FONT><FONT SIZE=2 FACE="Courier New"> _scriptRuntime;</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">IScriptEnvironment</FONT><FONT SIZE=2 FACE="Courier New"> ScriptRuntime { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">get</FONT><FONT SIZE=2 FACE="Courier New"> { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">return</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">this</FONT><FONT SIZE=2 FACE="Courier New">._scriptRuntime; } }</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">IScriptEngine</FONT><FONT SIZE=2 FACE="Courier New"> RubyEngine { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">get</FONT><FONT SIZE=2 FACE="Courier New"> { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">return</FONT><FONT SIZE=2 FACE="Courier New"> ScriptRuntime.GetEngine(</FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">typeof</FONT><FONT SIZE=2 FACE="Courier New">(</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">RubyContext</FONT><FONT SIZE=2 FACE="Courier New">)); } }</FONT></SPAN></P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">ObjectOperations</FONT><FONT SIZE=2 FACE="Courier New"> Operations { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">get</FONT><FONT SIZE=2 FACE="Courier New"> { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">return</FONT><FONT SIZE=2 FACE="Courier New"> RubyEngine.Operations; } }</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">RubyExecutionContext</FONT><FONT SIZE=2 FACE="Courier New"> ExecutionContext { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">get</FONT><FONT SIZE=2 FACE="Courier New"> { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">return</FONT><FONT SIZE=2 FACE="Courier New"> Ruby.</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">IronRuby</FONT><FONT SIZE=2 FACE="Courier New">.GetExecutionContext(RubyEngine); } }</FONT></SPAN></P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">IAttributesCollection</FONT><FONT SIZE=2 FACE="Courier New"> GlobalItems { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">get</FONT><FONT SIZE=2 FACE="Courier New"> { </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">return</FONT><FONT SIZE=2 FACE="Courier New"> ExecutionContext.GlobalScope.Dict; } }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">delegate</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">void</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">TestDelegate</FONT><FONT SIZE=2 FACE="Courier New">();</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">static</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">void</FONT><FONT SIZE=2 FACE="Courier New"> Main(</FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">string</FONT><FONT SIZE=2 FACE="Courier New">[] args)</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">new</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">Program</FONT><FONT SIZE=2 FACE="Courier New">().RunAllTests();</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> Program()</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">this</FONT><FONT SIZE=2 FACE="Courier New">._scriptRuntime = Ruby.</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">IronRuby</FONT><FONT SIZE=2 FACE="Courier New">.CreateRuntime();</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">void</FONT><FONT SIZE=2 FACE="Courier New"> RunAllTests()</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">List</FONT><FONT SIZE=2 FACE="Courier New"><</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">TestDelegate</FONT><FONT SIZE=2 FACE="Courier New">> tests = </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">new</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">List</FONT><FONT SIZE=2 FACE="Courier New"><</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">TestDelegate</FONT><FONT SIZE=2 FACE="Courier New">> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">new</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">TestDelegate</FONT><FONT SIZE=2 FACE="Courier New">(SimpleTests), </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">new</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">TestDelegate</FONT><FONT SIZE=2 FACE="Courier New">(AccessMethod1), </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">new</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">TestDelegate</FONT><FONT SIZE=2 FACE="Courier New">(AccessMethod2)</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> };</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">foreach</FONT><FONT SIZE=2 FACE="Courier New"> (</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">TestDelegate</FONT><FONT SIZE=2 FACE="Courier New"> test </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">in</FONT><FONT SIZE=2 FACE="Courier New"> tests)</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">Console</FONT><FONT SIZE=2 FACE="Courier New">.WriteLine(</FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">"================== EXECUTING: {0} ===================="</FONT><FONT SIZE=2 FACE="Courier New">, test.Method.Name);</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">try</FONT><FONT SIZE=2 FACE="Courier New"> { test(); }</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">catch</FONT><FONT SIZE=2 FACE="Courier New"> (</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">Exception</FONT><FONT SIZE=2 FACE="Courier New"> ex) { </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">Console</FONT><FONT SIZE=2 FACE="Courier New">.WriteLine(ex); }</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">IScriptScope</FONT><FONT SIZE=2 FACE="Courier New"> ExecuteString(</FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">string</FONT><FONT SIZE=2 FACE="Courier New"> code)</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">return</FONT><FONT SIZE=2 FACE="Courier New"> ScriptRuntime.ExecuteSourceUnit(</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> RubyEngine.CreateScriptSourceFromString(code)); </FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">void</FONT><FONT SIZE=2 FACE="Courier New"> SetGlobalVar(</FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">string</FONT><FONT SIZE=2 FACE="Courier New"> varName, </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">object</FONT><FONT SIZE=2 FACE="Courier New"> value)</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> ExecutionContext.GlobalVariables[</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">SymbolTable</FONT><FONT SIZE=2 FACE="Courier New">.StringToId(varName)] = value;</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">object</FONT><FONT SIZE=2 FACE="Courier New"> GetGlobalVar(</FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">string</FONT><FONT SIZE=2 FACE="Courier New"> varName)</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">return</FONT><FONT SIZE=2 FACE="Courier New"> ExecutionContext.GlobalVariables[</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">SymbolTable</FONT><FONT SIZE=2 FACE="Courier New">.StringToId(varName)];</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">object</FONT><FONT SIZE=2 FACE="Courier New"> GetGlobalConst(</FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">string</FONT><FONT SIZE=2 FACE="Courier New"> name)</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">return</FONT><FONT SIZE=2 FACE="Courier New"> GlobalItems.SymbolAttributes[</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">SymbolTable</FONT><FONT SIZE=2 FACE="Courier New">.StringToId(name)];</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">void</FONT><FONT SIZE=2 FACE="Courier New"> SimpleTests()</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> ExecuteString(</FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">"puts 'RUBY SAYS HELLO'"</FONT><FONT SIZE=2 FACE="Courier New">); </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// OK</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> SetGlobalVar(</FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">"x"</FONT><FONT SIZE=2 FACE="Courier New">, 666); </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// OK</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> ExecuteString(</FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">"$y=555"</FONT><FONT SIZE=2 FACE="Courier New">); </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// OK</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> ExecuteString(</FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">"puts \"ruby: $x = #{$x}\""</FONT><FONT SIZE=2 FACE="Courier New">); </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// OK</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">void</FONT><FONT SIZE=2 FACE="Courier New"> AccessMethod1()</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// Following fails with System.MissingMethodException: undefined local variable or method 'method' for main:Object</FONT></SPAN></P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> ExecuteString(</FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">@"</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> def sayHello </FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> puts 'Hello from method!' </FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> end</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> $m = method(:sayHello)</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> "</FONT><FONT SIZE=2 FACE="Courier New">);</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// Get the method object:</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">object</FONT><FONT SIZE=2 FACE="Courier New"> m = GetGlobalVar(</FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">"m"</FONT><FONT SIZE=2 FACE="Courier New">);</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// Here call the method, etc.</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">public</FONT><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">void</FONT><FONT SIZE=2 FACE="Courier New"> AccessMethod2()</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> {</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> ExecuteString(</FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">@"</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> module MyMethods</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> def sayHello </FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> puts 'Hello from method!' </FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> end</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> end</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT COLOR="#A31515" SIZE=2 FACE="Courier New"> "</FONT><FONT SIZE=2 FACE="Courier New">);</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">RubyModule</FONT><FONT SIZE=2 FACE="Courier New"> myModule = (</FONT><FONT COLOR="#2B91AF" SIZE=2 FACE="Courier New">RubyModule</FONT><FONT SIZE=2 FACE="Courier New">) GetGlobalConst(</FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">"MyMethods"</FONT><FONT SIZE=2 FACE="Courier New">); </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// OK</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">object</FONT><FONT SIZE=2 FACE="Courier New"> sayHello = Operations.GetMember(myModule, </FONT><FONT COLOR="#A31515" SIZE=2 FACE="Courier New">"sayHello"</FONT><FONT SIZE=2 FACE="Courier New">); </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// Fails at Assertion at ActionBinber.UpdateSiteAndExecute()</FONT></SPAN></P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// Here call the method, etc.</FONT></SPAN>
<BR><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> }</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New"> } </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// class</FONT></SPAN>
</P>
<P><SPAN LANG="fi"><FONT SIZE=2 FACE="Courier New">} </FONT><FONT COLOR="#008000" SIZE=2 FACE="Courier New">// namespace</FONT></SPAN>
</P>
<BR>
</BODY>
</HTML>