[Ironruby-core] invoke member and dynamic binding isn't the same?

Ivan Porto Carrero ivan at flanders.co.nz
Mon Nov 30 04:08:16 EST 2009


I've included a C# project with all the files you need as attachment.

http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=3213
---
Met vriendelijke groeten - Best regards - Salutations
Ivan Porto Carrero
Blog: http://flanders.co.nz
Google Wave: portocarrero.ivan at googlewave.com
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)



On Wed, Nov 25, 2009 at 6:16 PM, Tomas Matousek <
Tomas.Matousek at microsoft.com> wrote:

> Can you send the entire source code that sets “Something” and then the
> entire C# method that accesses it, ideally a minimal repro?
>
>
>
> Tomas
>
>
>
> *From:* ironruby-core-bounces at rubyforge.org [mailto:
> ironruby-core-bounces at rubyforge.org] *On Behalf Of *Ivan Porto Carrero
> *Sent:* Wednesday, November 25, 2009 5:29 AM
> *To:* ironruby-core
> *Subject:* [Ironruby-core] invoke member and dynamic binding isn't the
> same?
>
>
>
> Hi
>
> I have some ruby code, which through a process of instance_eval and other
> meta programming tricks builds an object with a method assign defined on it.
>
>
>
>
>
> I have this code in C#
>
>
>
> *var scope = Engine.CreateScope();*
>
> *scope.SetVariable("ctxt", this);*
>
> *Engine.ExecuteFile("rubyfile.rb", scope);*
>
>
>
> This code correctly sets a something property on this (linked with ctxt)
>
> but when I then want to call a method on it that should exist
>
>
>
> *public dynamic Something  { get; set; }*
>
>
>
> *Something.assign("ivan")*
>
>
>
> Unhandled Exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:
> 'Iro
>
> nRuby.Builtins.RubyObject' does not contain a definition for 'assign'
>
>    at CallSite.Target(Closure , CallSite , Object , String )
>
>    at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2[T0,T1](CallSite
> site,
>
>  T0 arg0, T1 arg1)
>
>    at BugTracker_40.Bug.Assign(String assignee) in
> C:\dev\ironruby-in-action\Sam
>
> ples\BugTracker_40\BugTracker_40\Bug.cs:line 60
>
>    at BugTracker_40.Program.Main(String[] args) in
> C:\dev\ironruby-in-action\Sam
>
> ples\BugTracker_40\BugTracker_40\Program.cs:line 13
>
>
>
>
>
> However the same code with:
>
>
>
> var _rubyOperations = Engine.CreateOperations()
>
> public object Something  { get; set; }
>
> _rubyOperations.InvokeMember(Something, "assign", "ivan")
>
>
>
> does work.
>
>
>
> The question is why? Is this the expected behavior? Am I missing an
> assembly reference (it has Ironruby.*, Microsoft.Scripting,
> Microsoft.Scripting.Core)
>
> ---
> Met vriendelijke groeten - Best regards - Salutations
> Ivan Porto Carrero
> Blog: http://flanders.co.nz
> Google Wave: portocarrero.ivan at googlewave.com
> Twitter: http://twitter.com/casualjim
> Author of IronRuby in Action (http://manning.com/carrero)
>
> _______________________________________________
> 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/20091130/321a7b47/attachment.html>


More information about the Ironruby-core mailing list