On Thu, Oct 11, 2012 at 3:33 PM, Muhammad Salman <[email protected]>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/.
>
>
-- You received this message because you are subscribed to the Google Groups
ruby-talk-google group. To post to this group, send email to
[email protected]. To unsubscribe from this group, send email
to [email protected]. For more options, visit this
group at https://groups.google.com/d/forum/ruby-talk-google?hl=en