ruby之attr_reader,attr_writer,attr_accessor

attr_accessor用于创建读取和设置实例变量的方法,例如attr_accessor :price,则相当于创建price方法用于读取@price的值,创建price=(yourprice)方法用于将@price的值设置为yourprice
attr_reader则只创建读取实例变量的方法
attr_writer只创建为实例变量赋值的方法
请看下面的例子详解:
例1
class Person
end

person = Person.new
person.name # 此处报错,提示no method errorObviously we never defined method name. Let's do that.

例2
class Person
def name
@name # simply returning an instance variable @name
end
end

person = Person.new
person.name # 不会报错,返回值为 nil
person.name = "Dennis" # 报错,提示 no method errorAha, we can read the name, but that doesn't mean we can assign the name. Those are two different methods. Former called reader and latter called writer. We didn't create the writer yet so let's do that.

例3
class Person
def name
@name
end

def name=(str)
@name = str
end
end

person = Person.new
person.name = 'Dennis'
person.name # 返回值为 "Dennis"

ruby提供了attr_accessor、attr_reader、attr_writer来让程序员免去编写上面类似代码的重复性工作。
例4
class Person
attr_reader :name
attr_writer :name
end

person = Person.new
person.name = "Dennis"
person.name # 返回值为"Dennis"

例5
class Person
attr_accessor :name

def greeting
"Hello #{@name}"
end
end

person = Person.new
person.name = "Dennis"
person.greeting # 打印"Hello Dennis"
现在明白了attr的三个类型的用法了吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值