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

 更新时间:2016年06月04日 16:22:20   作者:日拱一卒  
类与方法是面向对象编程语言中的典型特性,方法的概念与函数基本上相同,只不过类方法会受到类作用域的约束,这里我们就简单来看一下Ruby面向对象编程中类的方法与类的扩展

类方法

类方法其实质是生活在该类的单件类中的单件方法。其定义方法有三种,分别是:

# 法一
def MyClass.a_class_method; end


# 法二
class MyClass
  def self.anther_class_method; end
end


# 法三*
class MyClass
  class << self
    def yet_another_class_method; end
  end
end

其中第三种方法道出了,类方法的实质,特别记忆一下!

类扩展

类扩展通过向类的单件类中添加模块来定义类方法。

module MyModule
  def my_method; ‘hello'; end
end

class MyClass
  class < self
    include MyModule
  end
end

MyClass.my_method

上面代码展示了具体类扩展的实现方式,将一个MyModule模块引入到MyClass类的单件类中,因为my_method方法是MyClass的单件类的一个实例方法,这样,my_method方法也是MyClass的一个类方法。

对象扩展

类方法是单件方法的特例,因此可以把类扩展这种技巧应用到任意对象上,这种技巧即为对象扩展
 

# 法一: 打开单件类来扩展
module MyModule
  def my_method; ‘hello'; end
end

obj = Object.new
class << obj
  include MyModule
end

obj.my_method  # => “hello”
obj.singleton_methods  # => [:my_method]
# 法二:Object#extend方法
module MyModule
  def my_method; ‘hello'; end
end

obj = Object.new
#对象扩展
obj.extend MyModule
obj.my_method  # => “hello” 
#类扩展
class MyClass
  extend MyModule
end

MyClass.my_method # => “hello”

Object#extend是在接受者的单件类中包含模块的快键方式。

相关文章

  • Python的Flask框架中SERVER_NAME域名项的配置教程

    Python的Flask框架中SERVER_NAME域名项的配置教程

    SERVER_NAME项在Flask的路由配置中至关重要,特别是在配置绝对url和子域名的操作中,这里我们就来看一下Python的Flask框架中SERVER_NAME项的配置教程:
    2016-06-06
  • Ruby下WebDriver的相关操作指南

    Ruby下WebDriver的相关操作指南

    这篇文章主要介绍了Ruby下WebDriver的相关操作指南,同时也介绍了启动firefox drive加载firebug扩展的方法,需要的朋友可以参考下
    2015-07-07
  • Ruby配置rspec和RestClient来检测服务器

    Ruby配置rspec和RestClient来检测服务器

    这篇文章主要介绍了Ruby配置rspec和RestClient来检测服务器的方法,包括JSON文件的相关配置,需要的朋友可以参考下
    2015-07-07
  • Ruby 多线程的潜力和弱点分析

    Ruby 多线程的潜力和弱点分析

    这篇文章主要介绍了Ruby 多线程的潜力和弱点分析,本文讲解了Ruby 多线程和 IO Block、Ruby GIL 的影响、JRuby 去除了 GIL、Ruby 多线程总结等内容,需要的朋友可以参考下
    2015-03-03
  • 初步讲解Ruby编程中的多线程

    初步讲解Ruby编程中的多线程

    这篇文章主要介绍了初步讲解Ruby编程中的多线程,线程是各种编程语言学习当中的重点和难点,需要的朋友可以参考下
    2015-04-04
  • ruby的程序结构介绍

    ruby的程序结构介绍

    这篇文章主要介绍了ruby的程序结构介绍,本文讲解了源文件、模块、控制结构、方法定义、类及对象等内容,需要的朋友可以参考下
    2015-05-05
  • Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例

    Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例

    Monkey Patch猴子补丁是指在程序解释运行时动态添加类或模块的做法,这里我们就来看一下Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例
    2016-05-05
  • 详解Ruby中的代码块对象Proc

    详解Ruby中的代码块对象Proc

    在Ruby中一个代码块block不是对象,但可以用Proc来替代其作为对象进行操作,接下来我们就来详解Ruby中的代码块对象Proc
    2016-05-05
  • Ruby学习笔记一

    Ruby学习笔记一

    学习ruby有段时间了,记录下自己的学习心得并分享几个例子给大家
    2014-07-07
  • Ruby中处理时间的一些基本操作

    Ruby中处理时间的一些基本操作

    这篇文章主要介绍了Ruby中处理时间的一些基本操作,主要是利用到了Ruby中强大的Time模块,需要的朋友可以参考下
    2015-05-05

最新评论