ruby中类的写法以及属性,实例变量,类方法的用法

转载 2017年04月20日 18:49:47
    

ruby中类的写法以及属性,实例变量,类方法的用法

标签: rubyclassgetterjavasetterfile
3103人阅读 评论(0) 收藏 举报
本文章已收录于:
分类:
  1. Ruby中类的写法  
  2.  定义一个class  
  3.  class Song  
  4.   def initialize(name,artist,duration)  
  5.     @name = name  
  6.     @artist = artist  
  7.     @duration = duration  
  8.   end  
  9.  end  
  10.  定义了一个歌曲Song类,类名首字母要大写,@开头为实例变量  
  11.  initialize相当于java中的构造函数,在创建对象的时候会调用此函数,传入参数  
  12.  song = Song.new("往前一步","孟非",240)  
  13.  song.inspect 默认将对象的id和实例变量格式化  
  14.  inspect输出地格式不合适,ruby中可以给类重写to_s方法(有点像java中的toString())  
  15.  class Song  
  16.   def to_s  
  17.     "Song:#@name--#@artist(#@duration)"  
  18.   end  
  19.   song.to_s就可以输出定义好的格式  
  20.    
  21.   (2)类的继承  
  22.       现在需要给歌曲添加歌词  
  23.       class KoraokeSong < Song  
  24.         def initialize(name,artist,duration,lyrics)  
  25.           super(name,artist,duration)  
  26.           @lyrics = lyrics  
  27.         end  
  28.       end  
  29.      67页  
  30.     (3)对象和属性  
  31.      一个类的完整写法:  
  32.      class Song  
  33.        def initialize(name,artist,duration)#构造器  
  34.          @name = name  
  35.          @artist = artist  
  36.          @duration = duration  
  37.        end  
  38.        #读写属性,相当于java中的getter,setter  
  39.        attr_reader :name,:artist,:duration  
  40.        attr_writer :name,:artist,:duration  
  41.        #getter/setter的另外一种写法  
  42.        #def name  
  43.        #  @name  
  44.        #end  
  45.        #def artist  
  46.        #  @artist  
  47.        #end  
  48.        #def duration  
  49.        #  @duration  
  50.        #end  
  51.        #setter  
  52.        #def name=(new_name)  
  53.        #  @name = new_name  
  54.        #end  
  55.        #...  
  56.      end  
  57.     好一个完整的类就写好了。。。  
  58.     这样new一个对象 song = Song.new("The Mass","abc",260)  
  59.     song.name #访问属性,getter()  
  60.     song.name = "My Love" #修改属性值,setter()  
  61.   
  62.     (4)ruby中的虚拟属性  
  63.     现在我们要将秒为单位的时间,换成分钟  
  64.     def duration_in_minutes  
  65.        @duration/60.0  
  66.     end  
  67.     def duration_in_minutest=(new_duration)  
  68.       @duration = (new_duration*60).to_i  
  69.     end  
  70.     song = Song.new("a","b",260);  
  71.     song.duration_in_minutes --> 4.333  
  72.     song.duration_in_minutes = 4.2  
  73.     song.duration --> 252  
  74.       
  75.     duration_in_minutes并不是实例变量  
  76.     对外界而言,她和其他属性是一样,  
  77.     在内并没有对应的实例变量。  
  78.   (5)熟悉几个概念  
  79.   属性、实例变量和方法  
  80.   song.name #返回实例变量的值  
  81.   song.duration_in_minutes  #返回计算后的结果  
  82.   song.duration_in_minutes = 3.8  
  83.   #等号结尾的方法  
  84.    
  85.   (6)类变量  
  86.   @@play  
  87.     class Song  
  88.     @@play=0  
  89.     def initialize(name,artist,duration)  
  90.       @name = name  
  91.       @artist = artist  
  92.       @duration = duration  
  93.       @play = 0  
  94.      end  
  95.      def play  
  96.        @play = @play + 1  
  97.        @@play =@@play + 1  
  98.        "this song #@play plays. Total #@@play palys."  
  99.        #xx 播放xx次,总共播放xx次。  
  100.      end  
  101.     end  
  102.     类变量是属于类的。  
  103.     实例变量是属于每一个对象的。  
  104.     (java中有静态变量,静态方法,静态类都是属于类的,通过类名直接调用)  
  105.     (实例变量有点像一般的java中的一般变量)  
  106.     (7)类方法  
  107.     有点象java中的静态方法,类名直接调用  
  108.     当我们的歌曲时间太长了,可以给类定义一个方法  
  109.     class SongList  
  110.       MAX_TIME = 5*60  
  111.       def SongList.is_too_long(song)  
  112.         return song.duration > MAX_TIME  
  113.       end  
  114.     end  
  115.     我们会发现类方法遍布于ruby库中,例如  
  116.     File类的对象用来表示在底层文件系统中打开的一个文件。File类提供了几个类方法来操作文件,而他们并未打开文件,因此也没有相应的File对象,如果你想要删除一个文件,你可以调用类方法File.delete,传入文件名作为参数。  
  117.     File.delete("test.txt")  
  118.     (8)单例和其他的构造函数  
  119.       需求:记录点唱机发生的所有事情:  
  120.           播放的歌曲,收到的点歌费,  
  121.           倾倒进去的各种奇怪液体等等  
  122.       因为我们期望为音乐保留网络宽带,  
  123.       因此我们将日志文件保存在本地。  
  124.       日志类,但是只有一个,单例模式  
  125.       class MyLogger  
  126.         private_class_method :new  
  127.         @@logger = nil  
  128.         def MyLogger.create  
  129.             @@logger = new unless @@logger  
  130.             @@logger  
  131.         end  
  132.         返回的对象都是一个,可以通过查看方法的返回对象的标识来检验  
  133.         MyLogger.create.object_id --> 24031056  
  134.       end  
  135.         
  136.       可以添加类方法对类进行扩展功能  



ruby中类的写法以及属性,实例变量,类方法的用法

Ruby中类的写法 定义一个class class Song def initialize(name,artist,duration) @name = name @artist...
  • feihuale
  • feihuale
  • 2011年11月16日 12:28
  • 3970

实例变量和类变量、类方法和实例方法

类体中包括成员变量和局部变量,而成员变量又可以细分为实例变量和类变量,在声明成员变量的时候,用static给予修饰的称作类变量,否则称作实例变量。 那么,类变量和实例变量有什么区别呢? 我们知道,...
  • qq_30070433
  • qq_30070433
  • 2016年08月25日 12:01
  • 1734

Ruby类方法 实例方法

ruby的类方法与实例方法 类方法也叫静态方法,通过类名来调用的方法。实例方法,必须要new一个实例出来才能用。 class Foo def self.bar puts 'clas...
  • qq550764107
  • qq550764107
  • 2014年05月02日 11:27
  • 1270

ruby中类的写法以及属性,实例变量,类方法的用法 .

Ruby中类的写法   定义一个class   class Song    def initialize(name,artist,duration)      @name = name      @a...
  • passionboyxie
  • passionboyxie
  • 2012年03月21日 13:46
  • 693

ruby中类方法与实例方法调用

对此略懂, 简单解答下你的问题, 这块确实是ruby深入理解的关键点. 首先,要明白一点: Ruby一切皆对象. 什么意思呢? Ruby一个类也是一个对象(使用XX.class知道它的类是...
  • dazhi_100
  • dazhi_100
  • 2013年12月02日 14:38
  • 1407

Objective-C语言--属性和实例变量

Objective-C属性和实例变量
  • AddyChen
  • AddyChen
  • 2014年09月24日 17:22
  • 13589

类方法能否访问自己的属性

类方法不能直接访问自己的属性  即self.iconImageArr;不能用self访问。 在类方法中要访问自己的属性,必须要在类中实例化一个对象,然后再调用; 如下方代码: // // First...
  • liyunxiangrxm
  • liyunxiangrxm
  • 2016年01月21日 13:04
  • 4240

IOS开发中 类、对象、实例变量、成员变量、属性变量等区别和关系

类(class):具有相同属性和行为等同一类元素等总称,类是一个抽象的概念。 区分是类还是对象,看它能否继续被细分。 在OC中,类是表示对象类型的结构体,对象通过类来获取自身的各种信息。类由两个部...
  • wangtianyong0
  • wangtianyong0
  • 2016年01月06日 22:08
  • 2115

ruby中的实例变量和类变量

  为了解决老贾提出的,弄清楚为何继承的子类继承了类变量而没有继承实例变量的原因,需要弄清楚实例变量和类变量的存取方式。下面是我简单的一些分析,希望大家多多斧正。    类和对象的存储方式对象的结构在...
  • saint1126
  • saint1126
  • 2009年11月30日 21:17
  • 2059

仔细理解iOS成员变量和实例变量以及类方法和实例方法

首先来区别一下实例变量、成员变量的区别: 可以看到在接口 @interface 括号里面的统称为”成员变量”,实例变量是成员变量中的一种! 实例的英...
  • ios_xumin
  • ios_xumin
  • 2015年05月18日 17:28
  • 1573
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ruby中类的写法以及属性,实例变量,类方法的用法
举报原因:
原因补充:

(最多只允许输入30个字)