`

ruby的动态性

 
阅读更多
记住:Ruby的动态特性是以self身份的转换为基础的。
单例类
先来看看什么是单例类。大多数Ruby程序中发生的都涉及包含实例方法定义的类和模块:

class C
  def talk
    puts "Hi!"
  end
end

使用下面的方法实例化和实例方法调用:

c = C.new
c.talk

还可以直接给单个对象添加方法:

obj = Object.new
def obj.talk
  puts "Hi!"
end
obj.talk

像这样在特定对象上添加的方法称为单例方法。如果为一个给定的对象定义了单例方法,那么只有该对象可以调用该方法。

单例方法最常见的是类方法(因为普通的类也是对象,又称类对象,这些类都是Class类的实例):

class Ticket
  def Ticket.most_expensive(tickets)
  end
end

单例方法定义在何处
对象的单例方法定义在对象的单例类中。每一个对象实际上有两上类:
* 多个对象实例共享的类
* 单例类
可以将某个对象的单例类看作是它独有的方法保存区,仅仅由对象拥有,其他对象不能分防享。

直接检查和修改单例类
单例类是匿名的。使用下面的记法来打开单例类的定义:

class << object
  # method and constant definitions here
end

<<object记法表明是object的匿名单例类。例:

str = " I am string"
class << str
def twice
    self + " " + self
end
end
puts str.twice

输出:I am a string I am string
twice方法是str的单例方法。用下面的代码,效果是一样的:

def str.twice
  self + " " + self
end

使用class << 定义类方法:

class Ticket
  class << self
    def most_expensive(tickets)
    end
  end
end

class << self经常用来定义类方法(此时的self是这个类对象本身)。
不管是什么对象,都可以使用该技术打开对象的单例类的定义体。这意味着,在这个定义体内所做的事都属于该对象。


方法查找路径上的单例类
对象的单例类出现在方法查找路径上的第一个位置。单例类是对象的个人方法存储区,所以最先搜索。由单例类混含进来的模块,先于对象所属类查找,也先于对象所属类混含的任何模块查找。

以上的意思是说:在方法查找的时候,单例类的内容永远优先于其他查找。

深入类方法
类方法是为Class类的对象定义的单例方法。在很多方面和其他的单例方法相似,但也有它特别的地方:为类对象定义的单例言法可以被该类的子类调用。

class C
end

def C.a_class_method
  puts "Singleton method defined on C"
end

C.a_class_method

class D < C

D.a_class_method

类对象的单例类有时被称为元类,有时“元类”也泛指所有的单例类。




分享到:
评论

相关推荐

    Ruby动态编程对象编程Ruby动态编程对象编程Ruby动态编程对象编程

    ### Ruby动态编程语言的核心知识点 #### 一、Ruby的特点与优势 **1. 简洁而优雅** - **设计哲学:“最小意外原则”** - Ruby的设计理念旨在减少不必要的复杂性和冗余,使得代码更加直观易懂。 - **简洁的语法** ...

    Ruby动态编程语言v2.6.3

    Ruby是一种跨平台、面向对象的动态类型编程语言。Ruby 体现了表达的一致性和简单性,它不仅是一门编程语言,更是表达想法的一种简练方式。 Ruby 是一个注重均衡的语言,它的发明者松本行弘(Yukihiro “Matz” ...

    ASP.NET源码——[博客空间]IronRuby博客中文版 Alpha.zip

    【ASP.NET源码——[博客空间]IronRuby博客中文版 Alpha.zip】是一个包含ASP.NET源码的压缩包,专门针对IronRuby技术的中文版本。...对于那些熟悉.NET但希望尝试Ruby动态性的开发者来说,这是一个极好的学习材料。

    Ruby-rubybuild编译和安装Ruby

    Ruby是一种动态、开源的编程语言,以其简洁、优雅的语法和强大的元编程能力著称。在Ruby开发中,为了管理不同版本的Ruby环境,我们常常会使用到`rbenv`和`ruby-build`这两个工具。本文将详细介绍如何使用`ruby-build...

    Programming Ruby

    3. **动态性**:Ruby的动态性体现在运行时可以改变类、方法和变量的定义,允许动态绑定和鸭子类型。这为开发过程提供了极大的灵活性,但同时也要求开发者具备更高的责任感。 4. **块、 Proc 和 Lambda**:Ruby中的...

    Ruby编程Ruby Programming

    - **动态性**:Ruby支持运行时修改代码结构,允许开发者在程序运行过程中改变类和方法的行为。 - **元编程能力**:Ruby提供了一种称为元编程的技术,使得程序可以自我修改和自我扩展。 ### 二、Ruby编程基础 #### ...

    Ruby是一种强大而优雅的编程语言,以其简洁的语法、动态性、面向对象编程和丰富的类库而著称 以下是对Ruby的500字资源介绍:

    #### 三、Ruby的动态性 1. **动态类型**:Ruby中的数据类型是动态的,这意味着变量可以在运行时更改其类型。 ```ruby age = 25 age = "twenty-five" # 类型从整数变更为字符串 ``` 2. **动态方法定义**:...

    Ruby教程 脚本语言

    1. **动态性**:Ruby支持动态类型系统,变量类型在运行时自动确定,允许代码更加灵活。 2. **强类型**:尽管是动态类型,但Ruby仍然是强类型语言,每个值都有其特定的类型,可以防止某些类型错误。 3. **垃圾回收**...

    Ruby完全自学手册

    Ruby语言设计之初就非常注重开发人员的编程体验,它拥有自然、表达性强的语法,易于阅读和编写,因而备受广大开发者的喜爱。Ruby语言非常强调代码的可读性和简洁性,因此它在Web开发、尤其是Web框架Ruby on Rails中...

    ruby(前途大好的ruby+rains)

    2. **动态性**:Ruby支持动态类型,变量的类型在运行时确定,无需提前声明。此外,它允许在程序运行时修改类和方法,增加了灵活性。 3. **元编程**:Ruby的元编程能力非常强大,可以使用`class_eval`、`instance_...

    Ruby资源ruby-v3.1.1.zip

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本资源“ruby-v3.1.1.zip”包含了Ruby的最新版本3.1.1,这是一个重要的里程碑,因为它引入了新特性、性能优化以及对旧...

    ruby1.8.6-26

    - 动态:Ruby具有高度的动态性,允许在运行时修改类和对象。 - 垃圾回收:内置垃圾回收机制,自动管理内存,简化开发者的工作。 - 组合性:通过模块(module)实现代码的复用和封装,支持多继承。 - 充实的标准库:...

    Ruby-一个Ruby的例子

    其次,Ruby的动态性允许你在运行时改变程序的行为。这意味着你可以自由地添加方法到类,甚至在运行时创建新的类。例如: ```ruby class Integer def to_words # 这里可以添加将整数转换为英文单词的实现 end end...

    ruby安装包下载 | ruby环境搭建

    Ruby是一种强大的动态编程语言,广泛应用于Web开发,脚本编写,服务器管理等领域。为了在没有外网连接的环境中搭建Ruby环境,你需要提前下载并准备相关的安装包。在提供的压缩包中,包含了三个关键文件:`ruby-2.7.2...

    ruby官方chm文档

    《ruby23-language.chm》文档深入讲解了Ruby语言的特性,如动态性、元编程、闭包和块、方法定义与调用、变量作用域等。Ruby允许在运行时修改代码,这使得元编程成为其强大之处。理解如何使用`eval`、`class_eval`和`...

    Ruby Programming

    - **动态性**:Ruby是一种动态类型的语言,变量不需要事先声明类型。 - **可扩展性**:Ruby语言允许用户定义新的语法结构,这增加了它的灵活性和可扩展性。 - **强大的类库支持**:Ruby拥有丰富的标准库,支持多种...

    hw-ruby-intro.zip_SaaS软件工程_hw-ruby-intro_ruby _ruby 中文_saas

    3. **Ruby与SaaS结合**:Ruby语言的灵活性和动态性使其成为构建SaaS平台的理想选择。Ruby on Rails,一个基于Ruby的Web开发框架,以其MVC(模型-视图-控制器)架构和约定优于配置的理念,加速了SaaS应用的开发。...

    From Java to Ruby

    Ruby是一种灵活、简洁且富有表现力的编程语言,它提倡元编程和代码简洁性,与Java的面向对象特性有所不同。 首先,我们要理解Java和Ruby在面向对象编程(OOP)上的差异。Java的OOP体系严谨,类定义严格,而Ruby则...

Global site tag (gtag.js) - Google Analytics