No, that is not sufficient, because it does not work. Assuming the example I posted, this code fails:
dynamic automatic = testObject.automatic; dynamic manual = testObject.manual; dynamic autoLength = automatic.Length; dynamic manualLength = manual.Length; // RuntimeBinderException `manual.Length` fails because `manual` is of type `IronRuby.Builtins.RubyMethod` and `Length` is not defined. This is my problem... since 'manual' is not exposed to .Net as a property, it fails. Brian P.S. I REALLY appreciate you talking through this with me. On Thu, Jul 22, 2010 at 10:01 AM, Curt Hagenlocher <cu...@microsoft.com>wrote: > WPF binds by effectively treating the Ruby object as “dynamic” – that is, > it goes through IDynamicMetaObjectProvider. You can get the same behavior > from C# by saying > > > > dynamic obj = SomeRubyObject(); > > dynamic foo = obj.foo; > > > > Is this not sufficient for your needs? > > > > *From:* ironruby-core-boun...@rubyforge.org [mailto: > ironruby-core-boun...@rubyforge.org] *On Behalf Of *Brian Genisio > *Sent:* Thursday, July 22, 2010 6:55 AM > > *To:* ironruby-core@rubyforge.org > *Subject:* Re: [Ironruby-core] Why does attr_accessor create a property, > but method is just a method? > > > > Thinking on this further, if there were some sort of interop-specific class > method... like attr_clr_property :foo, that caused any methods named foo and > foo=(var) to be visible to .Net as properties, that would be sufficient. > > > > Any thoughts on this? > > B > > On Thu, Jul 22, 2010 at 9:34 AM, Brian Genisio <briangeni...@gmail.com> > wrote: > > Curt, > > > > Thank you very much for engaging :) > > > > Although I understand what you are saying, from an interop perspective, > this is not desirable. > > > > In fact, the WPF binding system will see two methods (foo and foo=(val)) > and determine that they are properties that can be bound to. C#, on the > other hand, can't use them as properties. Furthermore, if I want a simple > side effect (like property change notification) in a property, it makes > sense for me to define my own foo and foo=(val) methods. Again, WPF can get > these notifications and read the "properties", but C# just sees methods. > Another case might be where properties are just wrappers around hashes... a > case I am running into. > > > > At a very minimum, I would expect to be able to create get_foo and > set_foo(value) in ruby to have them be seen as .Net properties, but this > doesn't seem to work either. > > > > In general, I am trying to understand good interop practices between my > ruby and C# and WPF code, but I can't seem to make anything other than > attr_accessor work. > > > > Brian > > On Thu, Jul 22, 2010 at 9:17 AM, Curt Hagenlocher <cu...@microsoft.com> > wrote: > > I believe this works as designed. > > > > The problem is that Ruby doesn’t otherwise distinguish syntactically > between a property and a method with no parameters. Imagine that you’re in > tooling such as Visual Studio. By default, the values of properties are > automatically displayed in the debugger and in tool tips. But if I happen to > have a no-args method named format_cdrive, I probably don’t want that code > to be run just to inspect its value. Effectively, attr_accessor, attr_reader > and attr_writer are used by IronRuby as signals that indicate this operation > is free of potentially-nasty side effects. > > > > *From:* ironruby-core-boun...@rubyforge.org [mailto: > ironruby-core-boun...@rubyforge.org] *On Behalf Of *Brian Genisio > *Sent:* Thursday, July 22, 2010 5:49 AM > *To:* ironruby-core@rubyforge.org > *Subject:* Re: [Ironruby-core] Why does attr_accessor create a property, > but method is just a method? > > > > So, I haven't heard anything about this yet on Stack Overflow, or this > list. > > > > Does anyone know if this is this a bug in IronRuby interop? > > Thanks, > > Brian > > > > On Wed, Jul 21, 2010 at 12:34 PM, Brian Genisio <briangeni...@gmail.com> > wrote: > > This is a cross-post from Stack Overflow, but I haven't heard a peep there, > so I figured I'd try here: > > I am playing around with the interop between C# and IronRuby. I have > noticed that if I define a property in Ruby using `attr_accessor`, it is > presented to C# as a property. If, on the other hand, I create the exact > same code manually, it comes back as a method. > > For example, take this code: > > var engine = IronRuby.Ruby.CreateEngine(); > string script = @" > class Test > attr_accessor :automatic > > def manual > @manual > end > > def manual=(val) > @manual = val > end > > def initialize > @automatic = ""testing"" > @manual = ""testing"" > end > end > > Test.new > "; > var testObject = engine.Execute(script); > > var automatic = testObject.automatic; > var manual = testObject.manual; > > When you look at the C# `automatic` variable, the value is a string of > "testing". If you look at the C# `manual` variable, it is type > IronRuby.Builtins.RubyMethod. > > Ultimately, I want to create my own properties in Ruby that can be used in > C#, but I can't seem to make them be visible as properties like > `attr_accessor` does. > > I THINK, that there is some magic going on in the Module code of the Ruby > source code (ModuleOps.cs:DefineAccessor). Is there any way to do this in > Ruby code directly? > > Thanks, > Brian > > > > > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core@rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > > > > > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core@rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > >
_______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core