ruby中类变量,实例变量,以及attr_reader的区别于联系

最近学ruby 关于实例变量,实例变量,类变量,和attr_reader和attr_writer定义的方法搞不清楚,今早上跟一个哥们讨教了一番,貌似明白了点,写在这里,希望大家指教,我也不知道理解对不对。

 

 

实例变量属于对象,只能在对象初始化后才可以使用,与attr*(attr,attr_reader,attr_writer, attr_accessor)有联系,实例变量可以理解为跟java中用private关键字定义的属性,要访问必须通过get set方法,而attr*就想到于get set方法,只是ruby中更省事,不用定义private属性,直接用attr* ruby就可以跟你生成访问实例变量的方法,实例变量的定义在变量前加一个@符号。

class Song
  attr_reader :id, :name, :artist
  attr_writer :id, :name, :artist

end

相当于

class Song

  def id

    @id

  end

  def id=(id)

    @id = id

  end

类变量属于类,不需要实例化这个类就可以使用,相当于java中的static关键字定义的属性或者方法。

 

在ruby里不能直接操作类的属性,必须通过方法来操作,也就是说在ruby里只有方法这个概念,实例变量要有对应的方法来对其进行读写操作(这里的写指的是赋值),但是这样很麻烦,ruby提供了一个简洁的办法,通过attr_reader来定义实例变量时可读的,通过attr_writer定义实例变量可以赋值(写),当然也有别的方法,用attr(默认是读)或者是attr_accessor(读写)对实例变量进行操作.

你可能感兴趣的:(ruby中类变量,实例变量,以及attr_reader的区别于联系)