ruby-attr_accessor使用

本文详细介绍了Ruby中的attr_accessor方法,包括其基本用法和内部原理。通过多个示例展示了如何使用该方法简化类中实例变量的读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ruby-attr_accessor使用

ruby语法-attr_accessor方法使用

本文主要讲解下ruby下attr_accessor方法的使用。

示例1:

class Person
end

person = Person.new
person.name # => no method error

显然,我们Person类里没有定义name的方法,执行报错。

示例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 error

其中,"person.name"是调用的读方法(reader),"person.name = "Dennis""调用的是写方法(writer)。
虽然我们创建了name的函数,但是我们仍然不能给name变量赋值。那么我们怎么才能使用writer方法呢,请看接下来的例子。

示例3

class Person
  def name
    @name
  end

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

person = Person.new
person.name = 'Dennis'
person.name # => "Dennis"

在这个实例中,我们实现了对@name变量的读和写。
但是,如果这样写是不是太麻烦了? 有没有简单的方式实现相同的功能呢?

示例4

class Person
  attr_reader :name
  attr_writer :name
end

attr_xxx方法出现了,这两个方法和示例3效果相同。想看更简单的方式?接着来

示例5

class Person
  attr_accessor :name

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

person = Person.new
person.name = "Dennis"
person.greeting # => "Hello Dennis"

"attr_accessor :name"方法包含了attr_reader和attr_reader方法,实现了对实例变量@name的writter和reader。

总结:
attr_accessor方法包含了attr_reader和attr_reader方法,当使用attr_accessor方法时,可以通过类实例对指定的变量赋值和读操作。
一个小问题?
为什么不直接用"attr_accessor @name"这种形式呢?为什么非要用":"符号去做声明?

    要理解attr_accessor是一个方法调用,":name"是这个方法的一个参数,":"不是特殊的语法。

    如果你使用"attr_accessor @name"的形式,那么会被ruby解析为"attr_accessor nil",是不能通过类实例给name赋值的,会产生报错信息"`attr_accessor': nil is not a symbol nor a string (TypeError)"
posted @ 2018-03-19 17:36 MauriceWei 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值