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

ruby 对象的特殊方法

    博客分类:
  • java
 
阅读更多


特殊方法是指某实例所特有的方法。一个对象有哪些行为由对向所属的类决定,但是有时候,一些特殊的对象有何其他对象不一样的行为,在多数程序设计语言中,例如C++和Java,我们必须定义一个新类,但在Ruby中,我们可以定义只从属于某个特定对象的方法,这种方法我们成为特殊方法(Singleton Method)。

class SingletonTest
def info
puts "This is This is SingletonTest method"
end
end

obj1 = SingletonTest.new
obj2 = SingletonTest.new

def obj2.info
puts "This is obj2"
end

obj1.info
obj2.info

执行结果为:
This is This is SingletonTest method
This is obj2


有时候,我们需要给一个对象定义一系列的特殊方法,如果按照前面的方法,那么只能一个一个定义:

def obj2.singleton_method1
end

def obj2.singleton_method2
end

def obj2.singleton_method3
end
……
def obj2.singleton_methodn
end

这样做非常繁复麻烦,而且无法给出一个统一的概念模型,因此Ruby提供了另外一种方法,
class << obj
……
end

obj是一个具体的对象实例,class << 代表它的特殊类。

class SingletonTest
def meth1
puts "This is meth1"
end

def meth2
puts "This is meth2"
end
end

obj1 = SingletonTest.new
obj2 = SingletonTest.new

class << obj2
def meth1
puts "This is obj2's meth1"
end

def meth2
puts "This is obj2's meth2"
end
end

obj1.meth1
obj1.meth2
obj2.meth1
obj2.meth2

执行结果为:
This is meth1
This is meth2
This is obj2's meth1
This is obj2's meth2
分享到:
评论
1 楼 biyeah 2011-12-04  
不错的文章,又学到新的东西。

相关推荐

    ruby语法基础教程

    §3.4 特殊方法与特殊类 21 §3.5 类变量与类方法 23 §3.4 存取控制 23 §3.6 元类 25 §3.7 Ruby的动态性 26 §3.8 变量 26 §3.8.1 局部变量 27 §3.8.2 实例变量 27 §3.8.3 类变量 27 §3.8.4 全局变量 28 §...

    验证:Ruby对象的验证mixin

    花见::验证Ruby对象的验证混合状态联系主页: : 社区: : 指南: : 邮件列表: : API文件: : 错误/问题: : 支持: : 聊天: : RubyHanami :: Validations支持Ruby(MRI)2.3+和JRuby 9.1.5.0+。...

    collmex:会计软件collmex的http api的Ruby库(由romanlehnertcollmex-ruby派生)

    虽然collmex通过csv仅发送和接收字符串,但我们将数据视为ruby对象。 科尔梅克斯弦 它用Ruby表示为字符串。 没有长度限制。 因此,您必须自己保护collmex可以处理Char字段的所有内容。 Collmex浮动 Collmex浮筒也以...

    hybrid8:Ruby 到 Javascript V8 绑定

    Hybrid8,又名H8 当前开发状态​​:在生产环境中工作。 出于多种原因,这颗 gem 旨在取代 therubyracer: therubyracer 有/有很长... 当 ruby​​ 对象被 javascript 上下文使用时,GC 不会回收其占用的内存。 H

    Ruby中的String对象学习笔记

    String对象的定义可以使用””和”,对于单纯的字符串,推荐使用”进行定义,效率比””高,””与”的区别在于,”内的字符串定义后就是最终形态,即使如\n换行符,也会原样输出,而””更像是一个表达式,解析器会...

    Ruby 数据类型

    Ruby支持的数据类型包括基本的Number、String、Ranges、Symbols,以及true、false和nil这几个特殊值,同时还有两种重要的数据结构——Array和Hash。 数值类型(Number) 1、整型(Integer) 整型分两种,如果在31位以内...

    js 数组实现一个类似ruby的迭代器

    主要是要写的代码太多了,也许是js有特殊的处理数组的方式,真是我不知道而已,但是我真的想自己给js实现一个类似ruby的迭代器的东东,而且实现起来也不难,那就开始动手吧. 真的应该庆幸js是动态语言啊,如果是静态语言,...

    intro-to-oop

    面向对象程序设计导论什么是面向对象? 一种编程风格(其他一些是函数... new 构造函数是一种特殊的方法,当使用new关键字时,ruby在后台调用该函数,在构造函数中,我们为类的实例设置状态。 initialize关键字class Te

    dinosaurus:适用于Big Huge Labs Thesaurus API的Ruby包装器

    Dinosaurus.configure do |config| config.api_key = 'djksfhjk'end现在,在词库中查找单词: require "dinosaurus"results = Dinosaurus.lookup('word')结果“结果”对象是一个散列,其中添加了一些特殊的访问器。...

    spree_collection:一种在一个集合中组合不同 Spree 对象的方法

    提供一种通过多态关系创建狂欢对象集合的方法的扩展。 可用于特殊用途的页面或页面内的部分。 这允许您创建一个部分来突出某些产品,但也突出某些分类单元。 易于扩展。 安装 将 spree_collection 添加到您的 ...

    proxy_fetcher::flexed_biceps:Ruby JRuby TrufflleRuby gem&CLI,用于处理来自各种来源的代理列表

    它为您提供了一个特殊的Manager类,该类可以加载代理列表,对其进行验证并返回随机或特定的代理。 它还具有一个Client类,该类封装了用于使用代理发送HTTP请求的所有逻辑,该代理由gem自动获取和验证。 请查看下面...

    疯狂JAVA讲义

    6.2.1 打印对象和toString方法 170 6.2.2 ==和equals比较运算符 172 6.3 类成员 175 6.3.1 理解类成员 175 6.3.2 单例(Singleton)类 176 6.4 final修饰符 177 6.4.1 final变量 177 6.4.2 final方法 181 ...

    displaying-associations-rails-lab-onl01-seng-pt-032320

    此外,您会发现这些规范需要两种特殊方法: Artist#song_count和Song#artist_name 。 这些方法旨在保护视图免受模型中复杂性的影响。 它们也是称为的软件设计原理的一个很好的例子,在面向对象的语言(如Ruby)中...

    显示关联轨道实验室v-000

    此外,您会发现规范需要两种特殊方法: Artist#song_count和Song#artist_name 。 这些方法旨在保护视图免受模型中复杂性的影响。 它们也是称为的软件设计原理的一个很好的例子,在面向对象的语言(如Ruby)中有时...

    space-invaders-ruby-007-public

    如果船员没有分配到船上,他们也将无法使用他们的特殊能力。 例如,如果飞行员不在engageWarpDrive则飞行员无法使用engageWarpDrive ,因此,在少于12秒的engageWarpDrive内不能进行Kessel Run。 机组成员还应该...

    pureValidator:纯 Javascript 验证功能旨在与 cakePHP 和 Ruby on Rails 配合使用

    输入 id、错误消息和特殊情况由函数通过对象读取,该对象通过其构造函数传递给函数对象。规则如果您打算使用 pureValidate 处理 HTML 标记,则需要遵循一些规则。 指定的每个输入(用于验证)都应该有一个唯一的 ID...

    分析 rudy 类

    在OO编程的术语里,像”狗”这样的一类对象称之为一个类,一些特殊的属于这个类的对象叫作类的实体(instance of that class). 一般的,在Ruby或其它OO语言里创造一个对象首先得定义类的属性,接着再创造一个实体....

    fastlane-action:用于执行快速通道的GitHub动作

    如果您对Ruby版本没有任何特殊要求,我建议您使用2.7.2 。 从2020年12月开始,有一个新的主要Ruby版本可用,但是fastlane尚不支持该版本(请参阅)。 您可以关注以查看何时发生更改。 输入项 lane 必需应该执行的...

    javaSE代码实例

    13.2.3 String对象特殊机制付出的代价 252 13.3 StringBuffer类 253 13.3.1 弥补String不足的StringBuffer类 253 13.3.2 编写方法链以及StringBuffer类的重要方法 255 13.4 StringBuilder类 258 13.5 ...

Global site tag (gtag.js) - Google Analytics