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
最新评论