# Object evaluation

**URL:** <https://www.ruby-forum.com/t/object-evaluation/87925>\
**Category:** Rails\
**Created:** [March 6, 2007, 11:15pm UTC](https://www.ruby-forum.com/t/object-evaluation/87925 "2007-03-06T23:15:44Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Pierre-Alexandre\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c4cdca/32.png) [@Pierre-Alexandre\_M](https://www.ruby-forum.com/u/Pierre-Alexandre_M)\
**Post date:** [March 6, 2007, 11:15pm UTC](https://www.ruby-forum.com/t/object-evaluation/87925/1 "2007-03-06T23:15:44Z")

</div>

Hey,

Whenever I want to DRY some code, I want to do the following:

irb(main):001:0\> @my\_first\_var = ‘RoR rocks!’  
=\> “RoR rocks!”  
irb(main):002:0\> [‘first’].each do |attr|  
irb(main):003:1\* puts @my\_"#{attr}"\_var  
irb(main):004:1\> end

Surprisingly, this perfectly works:

```
array.each do |sym|
  define_method("#{sym}=") do

```

…/…  
end  
end

Any idea for the first snippet to work?

Thanks in advance.

–  
,========================.  
| Pierre-Alexandre M. |  
| email : removed\_email\_address@domain.invalid |  
`========================’

---

<div class="post-metadata">

**Author:** ![Pierre-Alexandre\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c4cdca/32.png) [@Pierre-Alexandre\_M](https://www.ruby-forum.com/u/Pierre-Alexandre_M)\
**Post date:** [March 6, 2007, 11:26pm UTC](https://www.ruby-forum.com/t/object-evaluation/87925/2 "2007-03-06T23:26:45Z")

</div>

Hi –

On 3/6/07, Pierre-Alexandre M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Hey,
> 
> Whenever I want to DRY some code, I want to do the following:
> 
> irb(main):001:0\> @my\_first\_var = ‘RoR rocks!’  
> =\> “RoR rocks!”  
> irb(main):002:0\> [‘first’].each do |attr|  
> irb(main):003:1\* puts @my\_“#{attr}”\_var  
> irb(main):004:1\> end

Try this:

puts instance\_variable\_get(“@my\_#{attr}\_var”)

> Surprisingly, this perfectly works:
> 
> ```
> array.each do |sym|
> define_method("#{sym}=") do
> ../..
> end
> end
> 
> ```

What’s surprising about it? 🙂

David

–  
Q. What is THE Ruby book for Rails developers?  
A. RUBY FOR RAILS by David A. Black ([http://www.manning.com/black](http://www.manning.com/black))  
(See what readers are saying! [http://www.rubypal.com/r4rrevs.pdf](http://www.rubypal.com/r4rrevs.pdf))  
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?  
A. Ruby Power and Light, LLC ([http://www.rubypal.com](http://www.rubypal.com))

---

<div class="post-metadata">

**Author:** ![Pierre-Alexandre\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c4cdca/32.png) [@Pierre-Alexandre\_M](https://www.ruby-forum.com/u/Pierre-Alexandre_M)\
**Post date:** [March 7, 2007, 12:01am UTC](https://www.ruby-forum.com/t/object-evaluation/87925/3 "2007-03-07T00:01:48Z")

</div>

For the posterity:

irb(main):001:0\> attr = ‘first’  
=\> “first”  
irb(main):002:0\> instance\_variable\_set("@my\_#{attr}_var",‘Ror rocks!’)  
=\> “Ror rocks!”  
irb(main):003:0\> instance\_variable\_get("@my_#{attr}_var")  
=\> “Ror rocks!”  
irb(main):004:0\> instance\_variable\_set("@my_#{attr}_var",‘Django  
doesn’t!’)  
=\> “Django doesn’t!”  
irb(main):005:0\> instance\_variable\_get("@my_#{attr}\_var")  
=\> “Django doesn’t!”

–  
,========================.  
| Pierre-Alexandre M. |  
| email : removed\_email\_address@domain.invalid |  
`========================’

---

<div class="post-metadata">

**Author:** ![Pierre-Alexandre\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c4cdca/32.png) [@Pierre-Alexandre\_M](https://www.ruby-forum.com/u/Pierre-Alexandre_M)\
**Post date:** [September 25, 2007, 11:04pm UTC](https://www.ruby-forum.com/t/object-evaluation/87925/4 "2007-09-25T23:04:24Z")

</div>

HI –

On 3/6/07, Pierre-Alexandre M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> That the first piece of code doesn’t work and the second does. There is  
> no big difference between them, is it?

In the first one you did something like:

puts @ **“#{attr}”**

rather than putting it all in a string.

David

–  
Q. What is THE Ruby book for Rails developers?  
A. RUBY FOR RAILS by David A. Black ([http://www.manning.com/black](http://www.manning.com/black))  
(See what readers are saying! [http://www.rubypal.com/r4rrevs.pdf](http://www.rubypal.com/r4rrevs.pdf))  
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?  
A. Ruby Power and Light, LLC ([http://www.rubypal.com](http://www.rubypal.com))

---

<div class="post-metadata">

**Author:** ![Pierre-Alexandre\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c4cdca/32.png) [@Pierre-Alexandre\_M](https://www.ruby-forum.com/u/Pierre-Alexandre_M)\
**Post date:** [March 7, 2007, 12:24am UTC](https://www.ruby-forum.com/t/object-evaluation/87925/5 "2007-03-07T00:24:51Z")

</div>

On Tue, Mar 06, 2007 at 05:26:04PM -0500, David A. Black wrote :

> Try this:
> 
> puts instance\_variable\_get("@my\_#{attr}\_var")

Dude, that’s pretty cool. Thanks.

> What’s surprising about it? 🙂

That the first piece of code doesn’t work and the second does. There is  
no big difference between them, is it?

–  
,========================.  
| Pierre-Alexandre M. |  
| email : removed\_email\_address@domain.invalid |  
`========================’
