# Adding properties to a method?

**URL:** <https://www.ruby-forum.com/t/adding-properties-to-a-method/53443>\
**Category:** Ruby\
**Created:** [February 5, 2006, 7:09pm UTC](https://www.ruby-forum.com/t/adding-properties-to-a-method/53443 "2006-02-05T19:09:34Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![jonT](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/5daacb/32.png) [@jonT](https://www.ruby-forum.com/u/jonT)\
**Post date:** [February 5, 2006, 7:09pm UTC](https://www.ruby-forum.com/t/adding-properties-to-a-method/53443/1 "2006-02-05T19:09:34Z")

</div>

Hi,

I’d like to be able to do the following:

class Method; attr\_accessor :foo; end  
def bar; “some\_res”; end  
method(:bar).foo=1

method(:bar).foo #= 1

Of coures what i’d actually get is:  
method(:bar).foo #= nil

because method(:bar) returns a new object each time.

Is it possible to bind properties to a method definition? If so, how?

Thanks,  
Jon

---

<div class="post-metadata">

**Author:** ![jonT](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/5daacb/32.png) [@jonT](https://www.ruby-forum.com/u/jonT)\
**Post date:** [February 5, 2006, 7:30pm UTC](https://www.ruby-forum.com/t/adding-properties-to-a-method/53443/2 "2006-02-05T19:30:44Z")

</div>

jonT wrote:

> Of coures what i’d actually get is:  
> method(:bar).foo #= nil
> 
> because method(:bar) returns a new object each time.

A String, in your example. Do you want the string to respond to the  
message ‘foo=’ ?

> Is it possible to bind properties to a method definition? If so, how?

What do you mean by “bind” and “properties”?

–  
James B.

“Programs must be written for people to read, and only incidentally  
for machines to execute.”

- H. Abelson and G. Sussman  
(in "The Structure and Interpretation of Computer Programs)

---

<div class="post-metadata">

**Author:** ![jonT](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/5daacb/32.png) [@jonT](https://www.ruby-forum.com/u/jonT)\
**Post date:** [February 5, 2006, 7:45pm UTC](https://www.ruby-forum.com/t/adding-properties-to-a-method/53443/3 "2006-02-05T19:45:50Z")

</div>

You can check out Facets’ kernel/method.

T.

---

<div class="post-metadata">

**Author:** ![jonT](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/5daacb/32.png) [@jonT](https://www.ruby-forum.com/u/jonT)\
**Post date:** [February 5, 2006, 8:34pm UTC](https://www.ruby-forum.com/t/adding-properties-to-a-method/53443/4 "2006-02-05T20:34:13Z")

</div>

Thanks, method! from  
[http://facets.rubyforge.org/rdoc-nano/classes/Object.html#M000260](http://facets.rubyforge.org/rdoc-nano/classes/Object.html#M000260)  
works great.

---

<div class="post-metadata">

**Author:** ![jonT](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/5daacb/32.png) [@jonT](https://www.ruby-forum.com/u/jonT)\
**Post date:** [February 5, 2006, 7:48pm UTC](https://www.ruby-forum.com/t/adding-properties-to-a-method/53443/5 "2006-02-05T19:48:51Z")

</div>

> > Of coures what i’d actually get is:  
> > method(:bar).foo #= nil  
> > because method(:bar) returns a new object each time.  
> > A String, in your example. Do you want the string to respond to the  
> > message ‘foo=’ ?

method(:bar)

# =\> \<Method: Object#bar\>

method(:bar).class

# =\> Method

method(:bar) actually returns a method object.

> What do you mean by “bind” and “properties”?  
> Sorry. By bind I meant simply to set the value of a properety in the  
> usual way. By property I mean property: a public field.

Essentially what I’m aiming to do is to have some way of storing data  
about a method (which is either private to Object or a member of some  
class or module) such that it is publicly available. Example:

def cd(dir)  
FileUtils.cd(dir.path)  
nil  
end  
method(:cd).args\_classes={0=\>JDir}

not terribly Ruby like but you get the picture.

Jon

---

<div class="post-metadata">

**Author:** ![jonT](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/5daacb/32.png) [@jonT](https://www.ruby-forum.com/u/jonT)\
**Post date:** [February 6, 2006, 8:34pm UTC](https://www.ruby-forum.com/t/adding-properties-to-a-method/53443/6 "2006-02-06T20:34:34Z")

</div>

On Feb 5, 2006, at 10:08 AM, jonT wrote:

> class Method; attr\_accessor :foo; end  
> def bar; “some\_res”; end  
> method(:bar).foo=1
> 
> method(:bar).foo #= 1
> 
> Of coures what i’d actually get is:  
> method(:bar).foo #= nil
> 
> because method(:bar) returns a new object each time.

Of course! It may not be the same method. Another thread may  
overwrite bar with a new implementation.

–  
Eric H. - removed\_email\_address@domain.invalid - [http://segment7.net](http://segment7.net)  
This implementation is HODEL-HASH-9600 compliant

[http://trackmap.robotcoop.com](http://trackmap.robotcoop.com)
