From: hemant Date: 2006-11-08T17:19:24+09:00 Subject: Re: understanding send On 11/8/06, gaurav bagga wrote: The problem is hidden in following lines. There is no problem with doing send on methods. > 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< 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. > 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 > > -- There was only one Road; that it was like a great river: its springs were at every doorstep, and every path was its tributary.