`
任清宇
  • 浏览: 20472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ruby 类和类方法

    博客分类:
  • ruby
 
阅读更多

Ruby类变量和类方法

类变量被类的所有对象所共享,它与类方法相关联,对一个给定的类来说,类变量只存在一份拷贝。类变量由两个@符开头,例如@@count。与全局变量和实例变量不同,类变量在使用之前必须被初始化。通常,初始化就是在类定义中的简单赋值。

例如,我们的点唱机可能希望记录每首歌被播放的次数。这个数目可能是Song对象的一个实例变量。当一首歌被播放时,实例中的值增加。但是,假如我们还想要了解下一共播放了多少首歌。通过搜索所有Song对象并累加它们的播放次数,或者冒天下之大不韪使用全局变量来完成统计;或者,让我们使用类变量。

class Song
  @@plays = 0
  def initialize(name.artist,duration)
    @name = name
    @artlist = artist
    @duration = duration
    @plays = 0
  end
  def play
    @plays += 1      #same as @plays = @plays +1
    @@plays += 1
    "This song:#@plays plays.Total #@@plays plays."
   end
end

 

出于调试的目的,我们还让Song#play 返回一个字符串,其中包括该歌曲被播放的次数,以及所有歌曲播放的总次数。我们可以很容易测试它。

s1 = Song.new("Song1","Artist1",234)  #test songs
s2 = Song.new("Song2","Artist2",345)
s1.play                       ->"This song:1 plays.Total 1 plays."
s2.play                       ->"This song:1 plays.Total 2 plays."
s1.play                       ->"This song:2 plays.Total 3 plays."
s1.play                       ->"This song:3 plays.Total 4 plays."

 

类变量对类及其实例都是私有的。如果你想让它们能够被外部世界访问,你需要编写访问方法。这个方法要么是一个实例方法,或者是类方法。

有时,类需要提供不束缚于任何特定对象的方法。我们已经见过一个这样的方法。new方法创建一个新的Song对象,但是new方法本身并不与一个特定的歌曲对象相关联。

song = Song.new(...)

我们会发现类方法遍布于Ruby库中。例如,File类的对象用来表示在底层文件系统中打开的一个文件。不过,File类还提供了几个类方法来操作文件,而它们并未打开文件,因此也没有相应的File对象。如果你想要删除一个文件,你可以调用类方法File.delete,传入文件名作为参数。

File.delete("dommed.txt")

类方法和实例方法是通过它们的定义区别开来的;通过在方法名之前放置类名以及一个句点,来定义类方法

class Example
   def instance_method                #instance method
   end
   def Example.class_method        #class method
   end
end

 

 
 
分享到:
评论

相关推荐

    Ruby 方法、类

    Ruby 方法、类 : Ruby 方法、类 ruby-9-method.mp4 ruby-9-method.mp4

    Ruby-Stringex一些实用的Ruby字符串扩展类

    Stringex 一些实用的Ruby字符串扩展类

    Ruby-FinishingMoves将一些很实用的方法添加至核心Ruby类

    Finishing Moves - 将一些很实用的方法添加至核心Ruby类

    Ruby编程语言

     7.7单键方法和EIGENCLASS257  7.8方法查找258  7.9常量查找261  第8章反射和元编程265  8.1类型、类和模块266  8.2对字符串和块进行求值268  8.3变量和常量271  8.4方法272  8.5钩子方法277  8.6跟踪279 ...

    Ruby-Refrigerator冻结所有核心ruby类

    冰箱提供了一个简单的方法来冻结所有的ruby核心类和模块。 它设计用于生产,以确保没有代码在运行时对核心类或模块进行意外更改。

    Ruby类实例变量、类实例方法和类变量、类方法的区别

    主要介绍了Ruby类实例变量、类实例方法和类变量、类方法的区别,本文探讨一下他们的定义和基本的使用场景,需要的朋友可以参考下

    ruby教程中文第四版

    也附带讲解了可运行于1.9版本的代码,事无巨细且通俗易懂地讲解了编写程序时所需要的变量、常量、方法、类、流程控制等的语法,以及主要类的使用方法和简单的应用,让没有编程经验的读者也能轻松掌握Ruby,...

    Ruby面向对象编程中类的方法与类的扩展

    类与方法是面向对象编程语言中的典型特性,方法的概念与函数基本上相同,只不过类方法会受到类作用域的约束,这里我们就简单来看一下Ruby面向对象编程中类的方法与类的扩展

    ruby教程.rar

    类/方法的定义 标准库 内部函数 内部变量 内部常数 内部类/模块/异常类 附加库 Ruby变更记录 ruby 1.6 特性 ruby 1.7 特性 ruby 1.8 特性 1.6.8到1.8.0的变更点(总结) ruby 1.9 特性 obsolete 对应...

    ruby基础教程(中文第四版).epub

    俗易懂地讲解了编写程序时所需要的变量、 常量、 方法、 类、 流程控制等的语法, 以及主要类的使用方法和简单的应用, 让没有编程经验的读者也能轻松掌 握Ruby, 找到属于自己的快乐编程方式, 做到融会贯通并灵活...

    详解Ruby中的单件方法和单件类

    单件方法顾名思义,就是只作用于单个对象的方法,同理单件类就是单件方法所存在的类,规定其作用域,这里我们就来详解Ruby中的单件方法和单件类:

    Ruby-Referral一个命令行工具用于查找过滤和排序Ruby代码的定义和引用

    Referral是一个CLI,可帮助您进行Ruby代码库的复杂分析和重构。 它在整个代码中查找,过滤和排序大多数类型的Ruby标识符(例如类,方法和变量)的定义和引用。

    ruby on rails 3.1.0数据库查询方法汇总

    本人学习总结的ruby on rails 3.1.0数据库类查询方法,比较全了

    Ruby常见面试题.pdf

    1. 什么是Ruby?简要介绍Ruby的特点和主要用途。 2. Ruby中的变量声明和赋值规则是什么?请说明Ruby变量声明和赋值...请说明在Ruby中模块和类的创建方法。 11. 什么是Ruby中的符号(Symbol)?请说明在Ruby中符号的作用

    Ruby_向ruby之父学程序设计(第二版)(经典入门)

     附录:使用Ruby时所需的知识、相关的资讯等,Ruby的mailing-list、网络上的各种资源与其用法,以及安装Ruby的方法。  希望本书的读者,都能从使用Ruby的过程中,找到属于自己的“兴趣”与“乐趣”。

    sjqzhang#webtech#Ruby File 类和方法1

    File 表示一个连接到普通文件的 stdio 对象。open 为普通文件返回该类的一个实例。

    Ruby的教程.txt

    类与对象:理解Ruby中的类和对象的概念,学习如何定义类、创建对象以及使用对象的属性和方法。 继承与多态:掌握Ruby中的继承机制,了解子类如何继承父类的属性和方法,并实现自己的特定功能。同时,学习多态的...

    中文版 Ruby 设计模式.pdf

    主要包括Ruby概述、使用模板方法变换算法、使用策略替换算法、通过观察器保持协调、通过迭代器遍历集合、使用命令模式完成任务、使用适配器填补空隙、使用装饰器改善对象、单例、使用工厂模式挑选正确的类、通过生成...

    Ruby 的通用遗传算法_Ruby_代码_下载

    Ruby 的通用遗传算法是一种非常简单易用的 Ruby 遗传算法: ...拿一个类来进化它并定义适应度、重组和变异方法。 使用种群创建一个 GeneticAlgorithm 对象。 根据需要多次调用进化方法,并查看最佳进化。

Global site tag (gtag.js) - Google Analytics