# Understanding send

**URL:** <https://www.ruby-forum.com/t/understanding-send/75201>\
**Category:** Ruby\
**Created:** [November 8, 2006, 7:33am UTC](https://www.ruby-forum.com/t/understanding-send/75201 "2006-11-08T07:33:54Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![gaurav\_bagga](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/a8b319/32.png) [@gaurav\_bagga](https://www.ruby-forum.com/u/gaurav_bagga)\
**Post date:** [November 8, 2006, 7:33am UTC](https://www.ruby-forum.com/t/understanding-send/75201/1 "2006-11-08T07:33:54Z")

</div>

class MyNewClass  
attr\_accessor :name,:place,:age  
end  
a=[]  
1.upto(3) do  
val=MyNewClass.new  
val.instance\_variables.each do |met|  
val.send(met.delete("@")+"=",gets.chomp!)  
end  
a\<\<val  
end  
a.each do |val|  
val.instance\_variables.each do |met|  
p val.send(met.delete("@"))  
end  
end  
a.each do |val|  
MyNewClass.instance\_methods(false).select{  
|v| v =~ /[=$]/  
}.each do |met|  
val.send(met,gets.chomp!)  
end  
end

a.each do |val|  
MyNewClass.instance\_methods(false).select{  
|v| v =~ /[a-z]$/  
}.each do |met|  
p val.send(met)  
end  
end

hi all,  
can any one tell me whats wrong with this code its not working for  
val.send(met.delete("@")+"=",gets.chomp!)

if instead of val.send(met.delete("@")+"=",gets.chomp!) i give  
val.name=gets.chomp!.. it works

regards  
gaurav v bagga

---

<div class="post-metadata">

**Author:** ![gaurav\_bagga](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/a8b319/32.png) [@gaurav\_bagga](https://www.ruby-forum.com/u/gaurav_bagga)\
**Post date:** [November 8, 2006, 9:20am UTC](https://www.ruby-forum.com/t/understanding-send/75201/2 "2006-11-08T09:20:05Z")

</div>

On 11/8/06, gaurav bagga [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

The problem is hidden in following lines. There is no problem with  
doing send on methods.

> end  
> You are trying to define some attributes, through attr\_accessor. Now,  
> what attr\_accessor does? It sets couple of instance methods  
> automatically on your class. So…if you do:  
> val.instance\_variables.each do|x|  
> p x  
> end

You will get an empty list. Why? Because your instance variables are  
not there yet. What probably you want to do is…get instance\_methods  
and set your instance\_variables there. Until you set them  
up…“val.instance\_variables” will contain a empty list. and hence all  
the subsequent lines will fail.
