Ruby中的attr_accessor到底是什么意思?

先来看看一个例子:

class Lady
  def initialize(age)
    @age = age
  end
end

mary = Lady.new(12)
mary.age

这样能取到值吗?

答案是不能。

会返回:undefined local variable or method `age'

但是如果这样改:

class Lady
  def initialize(age)
    @age = age
  end
  def age
    return @age
  end
end

mary = Lady.new(12)
mary.age

就可以取到值了。

返回: 12

当然还可以设置age的值,像这样:

class Lady
  def initialize(age)
    @age = age
  end
  def age
    return @age
  end
  def age=(new_age)
    @age = new_age
  end

mary = Lady.new(12)
mary.age

这样每次都要写一大堆,是不是挺烦人。

别着急,可以用attr_accessor来替代。像这样。

class Lady
  attr_accessor :age
  def initialize(age)
    @age = age
  end
end

mary = Lady.new(12)
mary.age

当然你也可以自定义

class Girl
  attr_accessor :age

  def age=(new_age)
    @age = (new_age > 18) ? 18 : new_age  # 如果大于18岁,默认18
  end
end

mary = Girl.new
mary.age = 30     # 虽然给了30
puts mary.age     #  仍然是18岁

你可能感兴趣的:(Ruby中的attr_accessor到底是什么意思?)