On Thu, Oct 11, 2012 at 3:33 PM, Muhammad Salman <lists / ruby-forum.com>wrote:

> I am relatively new to Ruby. In the below code which redefines the
> attr_accessor method i cannot understand the #{attr} and @#{attr}. I
>

Those are string interpolation.

know # as comment and @ as required for a instance variable in Ruby.
>
> 1 class Class
> 2 def attr_access(*attrs)
> 3    attrs.each do |attr|
> 4      class_eval %Q{
> 5      def #{attr}
> 6        @#{attr}
> 7      end
> 8      def #{attr}=(value)
> 9        @#{attr} = value
> 10      end
> 11     }
> 12    end
>   end
> end
>
>
I numbered a few of the lines to make this easier to talk about.
line 4 starts of an eval note the %Q which roughly means double quote this
string.
lines 5- 10 are basically in a string. from there the string interpolation
/ variable injection happens anywhere you see #{}
after line 11 the previous 5 through 10 are evaluated.

try doing this in irb
variable = "world"
p "hello #{variable}"

you should see
hello world

Hope this helps.

Andrew McElroy


> class Foo
>  attr_access :a,:b
> end
>
> Foo.instance_methods(false) #=> ["b=", "a=", "b", "a"]
>
> --
> Posted via http://www.ruby-forum.com/.
>
>