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岁
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容