I am relatively new to Ruby. In the below code which redefines the
attr_accessor method i cannot understand the #{attr} and @#{attr}. I
know # as comment and @ as required for a instance variable in Ruby.
class Class
def attr_access(*attrs)
attrs.each do |attr|
class_eval %Q{
def #{attr}
@#{attr}
end
def #{attr}=(value)
@#{attr} = value
end
}
end
end
end
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
···
On Thu, Oct 11, 2012 at 3:33 PM, Muhammad Salman <lists@ruby-forum.com>wrote:
%Q{
def #{attr}
@#{attr}
end
def #{attr}=(value)
@#{attr} = value
end
}
The # symbol when used with {} is for string interpolation, e.g..
f = "world"
puts "hello #{f}"
%Q is another way of defining a string with interpolation, e.g.
f = %Q{world}
puts "hello #{f}"
Henry
···
On 12/10/2012, at 9:33 AM, 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
know # as comment and @ as required for a instance variable in Ruby.