Forum: IronRuby accessor methods and property syntax in .NET

Bb45e44f9e0c0b50551429d3feb214d1?d=identicon&s=25 Davy Brion (Guest)
on 2010-09-07 10:37
(Received via mailing list)
Hi all,

IronRuby has a nice trick where attributes defined by attr_reader,
attr_accessor and attr_writer are usable as properties from C#... i was
just
wondering: is it possible to use the same trick in our own ruby code?

or can anyone just point me in the right direction as to where in the
IronRuby source code i could find where this is being done?

I have accessor methods that really need to do something specific and
ideally, i'd like them be usable as properties in .NET since it leads to
a
much nicer syntax in C#

brs,
Davy
1e39a948a58f4569c53d971c2e120920?d=identicon&s=25 Ivan Porto carrero (casualjim)
on 2010-09-07 11:06
(Received via mailing list)
You can just define them as attr_accessors and then implement the
methods

class Foo

  attr_accessor :bar, :baz

  def bar=(val)
    # do more stuff here for example
    @bar = val
  end

  def bar
    @bar
  end

end
Bb45e44f9e0c0b50551429d3feb214d1?d=identicon&s=25 Davy Brion (Guest)
on 2010-09-07 11:14
(Received via mailing list)
if i do that, calling bar as a property like this:

var value = myObject.bar;

leads to 'value' being an instance of IronRuby.BuiltIns.RubyMethod, and
not
the value that is in the @bar instance field

which

i'm using 1.1 btw, not sure how this would behave on 1.0

from looking at the IronRuby source code, it looks like i need to find a
way
to change the RubyMemberInfo for a given accessor method to
RubyAttributeReaderInfo or RubyAttributeWriterInfo
Bb45e44f9e0c0b50551429d3feb214d1?d=identicon&s=25 Davy Brion (Guest)
on 2010-09-07 11:56
(Received via mailing list)
your solution does however work for the assignment accessor... in fact,
you
can do something like this:

class Foo
  attr_reader :bar

  def bar=(val)
    # do more stuff here for example
    @bar = val
  end

end

and then you can do the following in C#:

var value = myObject.bar;
myObject.bar = someOtherValue;

for my specific scenario, i think i can actually get by with just
overriding
the assignment accessor but the thing i'm wondering is: is the current
behavior actually a bug? and will this behavior be preserved in future
releases?
170325813beddd7418a3b55ffbf378f9?d=identicon&s=25 Brian Genisio (Guest)
on 2010-09-07 14:47
(Received via mailing list)
Actually, we discussed this about a month ago:
http://rubyforge.org/pipermail/ironruby-core/2010-...

<http://rubyforge.org/pipermail/ironruby-core/2010-...
outcome was that a feature request was added to allow for C# properties
to
be defined using getter/setter in ruby.  I was going to look at
implementing
it... got into a bit, and had a baby... Haven't looked at it since.

B
Bb45e44f9e0c0b50551429d3feb214d1?d=identicon&s=25 Davy Brion (Guest)
on 2010-09-07 14:57
(Received via mailing list)
Hey Brian,

i saw that thread, but didn't really see a definitive answer as to how
to
work around it until it's implemented (though i might've missed it),
which
is why i thought i'd raise the question again :)
F0f461459193aa098a80bd3e74e0ac9c?d=identicon&s=25 Shay Friedman (shayfriedman)
on 2010-09-07 14:57
(Received via mailing list)
Beware!
Contributing to the IronRuby source code might result in having
babies!!!

:-)
Congratulations Brian!
4b9713fb234851d3892be3d745beffc9?d=identicon&s=25 Ted Neward (Guest)
on 2010-09-09 11:05
(Received via mailing list)
I love how he just tossed that off like it happens to everybody.



"Yeah, I know, I was committing this source patch, but all of a sudden
there
was this crying squalling thing in my lap that needed a diaper changed.
WTF
is up with that? . I know! Seriously! I thought good code wasn't
supposed to
have side effects?!? I kept looking to ROLLBACK, but sonuvagun, wouldn't
you
know it..."



Congrats, Brian.



Ted Neward

Java, .NET, XML Services

Consulting, Teaching, Speaking, Writing

http://www.tedneward.com





From: ironruby-core-bounces@rubyforge.org
[mailto:ironruby-core-bounces@rubyforge.org] On Behalf Of Shay Friedman
Sent: Tuesday, September 07, 2010 5:57 AM
To: ironruby-core@rubyforge.org
Subject: Re: [Ironruby-core] accessor methods and property syntax in
.NET



Beware!

Contributing to the IronRuby source code might result in having
babies!!!

:-)

Congratulations Brian!

On Tue, Sep 7, 2010 at 3:47 PM, Brian Genisio <briangenisio@gmail.com>
wrote:

Actually, we discussed this about a month ago:
http://rubyforge.org/pipermail/ironruby-core/2010-...



The outcome was that a feature request was added to allow for C#
properties
to be defined using getter/setter in ruby.  I was going to look at
implementing it... got into a bit, and had a baby... Haven't looked at
it
since.



B



On Tue, Sep 7, 2010 at 5:55 AM, Davy Brion <ralinx@davybrion.com> wrote:

your solution does however work for the assignment accessor... in fact,
you
can do something like this:

class Foo
  attr_reader :bar



  def bar=(val)

    # do more stuff here for example

    @bar = val

  end



end

and then you can do the following in C#:

var value = myObject.bar;
myObject.bar = someOtherValue;

for my specific scenario, i think i can actually get by with just
overriding
the assignment accessor but the thing i'm wondering is: is the current
behavior actually a bug? and will this behavior be preserved in future
releases?



On Tue, Sep 7, 2010 at 11:13 AM, Davy Brion <ralinx@davybrion.com>
wrote:

if i do that, calling bar as a property like this:

var value = myObject.bar;

leads to 'value' being an instance of IronRuby.BuiltIns.RubyMethod, and
not
the value that is in the @bar instance field

which

i'm using 1.1 btw, not sure how this would behave on 1.0

from looking at the IronRuby source code, it looks like i need to find a
way
to change the RubyMemberInfo for a given accessor method to
RubyAttributeReaderInfo or RubyAttributeWriterInfo



On Tue, Sep 7, 2010 at 11:01 AM, Ivan Porto Carerro
<ivan@flanders.co.nz>
wrote:

You can just define them as attr_accessors and then implement the
methods



class Foo



  attr_accessor :bar, :baz



  def bar=(val)

    # do more stuff here for example

    @bar = val

  end



  def bar

    @bar

  end



end



On Tue, Sep 7, 2010 at 10:36 AM, Davy Brion <ralinx@davybrion.com>
wrote:

Hi all,

IronRuby has a nice trick where attributes defined by attr_reader,
attr_accessor and attr_writer are usable as properties from C#... i was
just
wondering: is it possible to use the same trick in our own ruby code?

or can anyone just point me in the right direction as to where in the
IronRuby source code i could find where this is being done?

I have accessor methods that really need to do something specific and
ideally, i'd like them be usable as properties in .NET since it leads to
a
much nicer syntax in C#

brs,
Davy

_______________________________________________
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
This topic is locked and can not be replied to.