[Ironruby-core] Why does attr_accessor create a property, but method is just a method?
Brian Genisio
briangenisio at gmail.com
Thu Jul 22 09:34:53 EDT 2010
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 <curth at 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-bounces at rubyforge.org [mailto:
> ironruby-core-bounces at rubyforge.org] *On Behalf Of *Brian Genisio
> *Sent:* Thursday, July 22, 2010 5:49 AM
> *To:* ironruby-core at 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 <briangenisio at 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 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/20100722/2ddd0e5b/attachment-0001.html>
More information about the Ironruby-core
mailing list