attr_accessor相当于attr_reader和attr_writer的合集,实际上是在定义类成员变量的时候就给他定义了一个get和set方法。

在ruby中,类成员变量都是私有的,不能直接通过(类名.成员变量名)这样来对成员变量值进行操作。

在这个实例中可以看到,使用attr_accessor定义的成员可以直接对其进行set和get的操作,如果没有attr_accessor,则不行。

# 例子1
# 使用attr_accessor 运行正常

 1 class AttrAccessorTest1
 2   attr_accessor :name
 3   def initialize()
 4     @name = "test attr"
 5   end
 6 end
 7 t = AttrAccessorTest1.new
 8 puts t.name
 9 t.name = "test attr modify"
10 puts t.name

 
# 例子2
# 未使用attr_accessor 运行报错 Error: #<NoMethodError: undefined method ‘name’>

 1 class AttrAccessorTest2
 2   def initialize()
 3     @name = "test attr"
 4   end
 5 end
 6 t = AttrAccessorTest2.new
 7 # ↓↓↓↓↓↓ 未使用attr_accessor的name是不可通过 (类名.成员变量名),这样来对成员变量值进行操作
 8 puts t.name
 9 t.name = "test attr modify"
10 puts t.name