Ruby类的访问器方法(Accessor)的详解

由于initialize方法是private,所以Ruby类的实例变量不可以使用对象调用的方式直接被读取或修改,只能在实例方法中读取或修改,所以可以通过getter或setter实例方法分别读取和修改。

class MutablePoint
  def initialize(x,y)
    @x, @y = x, y
  end

  def x              #getter方法
    @x
  end

  def y              #getter方法
    @y
  end

  def x=(value)      #setter方法
    @x = value
  end

  def y=(value)      #setter方法
    @y = value
  end
end

给实例变量增加这种读写方法的需求俯拾皆是,但是以上的代码显得非常的繁琐,于是访问器方法应运而生。

class MutablePoint
  attr_reader :x, :y       #只读
  attr_writer :x, :y       #只写
  attr_accessor :x, :y     #读和写
  attr_:x                  #只读且只能定义一个属性             
  attr :y, true            #读和写且只能定义一个属性
end

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/rubye/4630.html

(0)
上一篇 2020年7月28日 21:13
下一篇 2020年7月29日 02:00

相关推荐

  • Ruby语言的单键(Singleton)方法的介绍

    Ruby中的核心类库和标准类库中的类和模块对于开发者是“开放的“,这是Ruby的关键特性之一,可以在运行时修改和扩展,可以用单键(Singleton)方法定义类方法或者专门为某个对象添加方法。之所以被称为单键方法,因为它只在单个对象上可用。 Math模块是Ruby核心类库的一部分,上述代码给Math模块添加了一个新方法…

    Ruby经验 2020年7月28日
    01600
  • Ruby中self的意义

    如果self在类的代码体中,但是在任何实例方法定义体外,self表示定义的当前类。 如果self在实例方法定义体内,self表示定义的当前实例。

    Ruby经验 2020年7月27日
    01360
  • Ruby语言==与===的区别

    ==被称为相等性操作符,通常用来比较两个对象的类型和内容是否匹配(matching),先类型比较,然后内容比较,最终返回true或false。 ===被称为条件相等性操作符,通常用于case语句when条件(Regexp、Range、Proc)的匹配(matching),先类型比较,然后与每个可能的条件分支进行内容比较…

    Ruby经验 2020年7月27日
    01520

发表评论

登录后才能评论