当前位置: 首页 > 编程日记 > 正文

Ruby的Singleton method

Ruby中,特定于某一对象的方法被称为Singleton method。

例如:

a = "string"def a.runputs "#{self} run"
endstr.run # =>#string run

run方法是特定于a这个对象的,故run方法是a的Singleton方法。

实现上,当定义Singleton方法时,Ruby会在对象a和String类之间插入一个匿名类,或者说Singleton类。此时,a的类为Singleton类,Singleton类的超类为String类。

我们考虑到String类其实也可以看为Class类的一个实例,所以Singleton方法也可以在类的层面上定义。

例如:

class Adef self.runputs "#{self} run"end
endA.run # => A run

只需要把A看做Class类的一个实例,而Singleton类插入到了A和Class类之间。

有人会发现,上面这段代码不是定义了一个类方法嘛?

yes, you got it !实际上,在Ruby中,没有所谓的“类方法”,所有的类方法都是通过Singleton类来实现的。

上面的代码也可以写为:

class Adef A.runputs "#{self} run"end
end

同过这个Singleton类的存在,我们可以做很多有趣的操作:

str =  "string"class << strdef runputs "#{self} run"end
end

这种方式定义的结果与开头代码的结果是一致的。

我们可以利用这个Singleton类进行简单的元编程:

class A
enda = A.newclass << aattr_accessor :attr
enda.attr = 10
puts a.attr
在Singleton类中利用attr_accessor设定attr实例变量,这样我们相当于再程序运行时动态的改变了原有类,获得了更大的灵活性。

相关文章:

AD ---- 活动目录的日常管理操作

管理信任关系:什么是信任关系:信任关系是用于确保一个域的用户可以访问和使用另一个域中资源的安全机制 根据传递性分,信任关系可分为可传递信任关系和不可传递信任关系两种 根据域之间关系分,Windows信任关系则可分为四种 信任关系是如何工作的 创建信任关系 删除信任关系 …

07.GitHub实战系列~7.Git之VS2013团队开发(如果不想了解git命令直接学这篇即可)...

GitHub实战系列汇总&#xff1a;http://www.cnblogs.com/dunitian/p/5038719.html —————————————————————————————————————————————————————— 直接实战~&#xff08;如果你之前安装了git其他版本都可以卸载了~这个就够了…

公开课报名 | 深入浅出理解A3C强化学习

强化学习是一种比较传统的人工智能手段&#xff0c;在近年来随着深度学习的发展&#xff0c;强化学习和深度学习逐渐结合在了一起。这种结合使得很多原来无法想象的工作有了可能&#xff0c;最令我们瞩目的莫过于AlphaGo战胜李世石&#xff0c;以及OpenAI团队的机器人可以在团战…

Hibernate是啥?

1&#xff1a;Hibernate和JDBC、ODBC的作用是一样的、用来访问、操作数据库的。它的优势在哪&#xff1f;没用过、我也不知道。。。不过貌似【数据持久化】是个关键词。[下边是百科里的一段话&#xff1a;对象上数据的修改&#xff0c;Hibernate框架会把这种修改同步到数据库中…

#Java夜未眠# 读书笔记

微博上的蔡学镛是个有趣的家伙&#xff0c;有条微博这样写道&#xff1a; “记得十多年前我的第一本书出版时&#xff0c;我隔几天就到书店微服出巡&#xff0c;看看状况。当看到有人拿起我的书时&#xff0c;我内心的口白&#xff1a;"英明英明&#xff0c;你可真识货呀…

asp.net 控制页面css样式

asp.net 控制页面css样式fontDiv.Style["display"] "none";fontDiv.Style["display"] "";转载于:https://www.cnblogs.com/qiantuwuliang/archive/2009/06/02/1494709.html

腾讯AI Lab负责人张潼离职,张正友或接替其位

来源 | 网易智能 刚刚&#xff0c;据知情人士透露&#xff0c;腾讯人工智能实验室 AI Lab 主任张潼已经从腾讯离职&#xff0c;未来将重返学术界。 关于该消息&#xff0c;腾讯方面目前尚无回应。 网易智能独家获悉&#xff0c;AI Lab接手人是机器人实验室的张正友。 有消息…

频频霸榜的Python,竟遭开发者嫌弃!

在刚刚过去的 2018 年里&#xff0c;要说最热门的科技领域是哪一个&#xff1f;毋庸置疑的是&#xff0c;人工智能必排在前列&#xff1b;而要论编程语言界&#xff0c;最流行的编程语言是谁&#xff1f;那非 Python 莫属。2018 年 8 月&#xff0c;根据一年一度的 IEEE Spectr…

#每天一种设计模式# 观察者模式

系统常常会出现这种情况&#xff1a; 每一个部分需要知道整体的状态。比如Excel中&#xff0c;当你修改了一个单元格的值&#xff0c;可能横列的sum需要改变&#xff0c;纵列的sum需要改变&#xff0c;根据这个单元格做的图需要改变&#xff0c;是否被修改的按钮需要激活... 如…

el-input怎么绑定回车事件

在 Vue 2.0 中&#xff0c;为自定义组件绑定原生事件必须使用 .native 修饰符&#xff1a;<el-input v-model"queryForm.skuName" placeholder"请输入商品名称" keyup.enter.native"skuNameSearch"></el-input> 转载于:https://www.…

DOS命令大全(经典收藏)

http://wuhua.javaeye.com/blog/32374 net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对…

Ruby Metaprogramming

Ruby使用者对attr_accessor一定不会陌生。 class Aattr_accessor :num end 等效于&#xff1a; class Adef numnumenddef (value)num valueend end 在类的定义中&#xff0c;attr_accessor定义了num的读写方法&#xff0c;只用了一行代码就生成了两个实例方法&#xff0c;很…

四川大学线下编程比赛第一题:数字填充

四川大学线下编程比赛第一题&#xff1a;数字填充公布公司&#xff1a;有 效 期&#xff1a;CSDN 2014-09-27至2015-09-26 难 度 等 级&#xff1a;答 题 时 长&#xff1a;编程语言要求&#xff1a;120分钟C C Java C#题目详情peter喜欢玩数字游戏。但数独这种游戏对他来说太简…

Google AI骗过了Google,工程师竟无计可施?

作者 | 若名 出品 | AI科技大本营 如果你通过 Google 搜索购买演唱会门票或者注册论坛账号&#xff0c;系统会提示你必须点击几个图框、音频或者移动鼠标等操作来确认是人类在操作验证而不是机器人。 其背后的验证机制就是 CAPTCHA&#xff08;验证码&#xff09;&#xff0c;…

用高中数学理解AI “深度学习”的基本原理

本文作者尚俊霖&#xff0c;全职产品经理&#xff0c;业余自学机器学习。最近开始写硬核科普&#xff0c;欢迎关注公众号欠拟合&#xff08;ID:Underfit&#xff09;。Google 研发了十年自动驾驶后&#xff0c;终于在本月上线了自动驾驶出租车服务。感谢“深度学习”技术&#…

Linux I2C工具查看配置I2C设备【转】

转自&#xff1a;http://blog.chinaunix.net/uid-26895763-id-3478882.html 在處理音訊相關的問題時&#xff0c;我通常會找個方法來讀寫codec中register的值。幸好linux上也有這樣的工具 – i2c tools。先到lm-sensors下載soure code&#xff0c;然後cross compile成arm的執行…

Ruby之类定义

介绍几种不常见的类定义方法&#xff1a; 1. Struct PersonStruct.new(:name,:age,:sex)pPerson.new("liyuchun")puts p Struct生成一个仅仅包含数据属性的类。但是你可以在这个类的基础上扩展&#xff1a; PersonStruct.new(:name,:age,:sex)class Persondef …

引用 引用 引用 学会求知 学会共处 学会做人 学会做事

◆学历不等于能力和水平&#xff0c;学校学到的在社会能用上的只有15%&#xff0c;而在社会能学到85%。◆世上很多发生的事必有其原因&#xff0c;必有其结果&#xff0c;必有其收获。◆心态归零&#xff0c;天道酬勤。◆老板是私营企业家&#xff0c;赚了小钱是自己的&#xf…

python写一个通讯录step by step V3.0

python写一个通讯录step by step V3.0 更新功能&#xff1a; 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他&#xff1a;函数、字典、模块调用 注意问题&#xff1a; 1、更优美的格式化输出 2、把日期换算成年龄 3、更新操作做的更优雅 准备工作 db准备…

#每天一种设计模式# 模板方法

《松本行弘的程序世界》对模板方法(Template method)的说明非常清晰&#xff1a; 在父类的一个方法中定义算法的框架&#xff0c;其中几个步骤的具体内容则留给子类来实现。 比如一个用于公司欢迎同事的程序&#xff1a; class Adef initializename "jinbin"word …

如何更好地玩转GitHub?

本文作者黄昱俊&#xff0c;国资企业投资部总经理&#xff0c;主要负责投资部门建设、投资流程管理、投后资源管理。历经10年&#xff0c;从医疗器械研发工程师到投资管理的蜕变&#xff0c;业余尝试ETF量化投资。 本文介绍如何在GitHub上更新Fork以及PullRequest给源项目。 在…

System Center Data Protection Manager 2007补助说明

在 DPM 服务器上配置 Windows 防火墙 1. 在 Control Panel&#xff08;控制面板&#xff09;中&#xff0c;单击 Windows Firewall&#xff08;Windows 防火墙&#xff09;。2. 在 General&#xff08;常规&#xff09;选项卡中&#xff0c;验证是否已开启 Windows 防火墙&am…

可伸缩系统的设计模式(译)

Ricky Ho在他的博客中分享了该文章&#xff0c;该文章是一个简单的概括分享&#xff0c;详细的可以参见他博客的其它详细文章。下面主要是意译。 1、Load Balancer&#xff1a;负载均衡 – 由分发者来决定哪个工作者处理下一个请求&#xff0c;这种决定可以基于不同的策略。 “…

Boson_Netsim_6使用方法

使用说明&#xff1a; netsim6.0只有在英文操作系统下才能释放出正确的pdf文件&#xff0c;大家可以到文档中心下载以下3个pdf文件&#xff1a; SequentialLabs.pdf&#xff1a;解压后复制到安装目录下的\MyLabs\ccna_sequential\Sequential Labs (CCNA)\common中覆盖相应的文件…

Ruby之Enumerator类

今天发现了Ruby1.8.6和 Ruby1.9.2的一个不同之处&#xff0c;试运行以下代码&#xff1a; require findputs Find.find("./data").class 在Ruby1.9.2中&#xff0c;最后的结果是Enumerator&#xff0c;而在Ruby1.8.6中&#xff0c;结果则是find: no block given (L…

澎思科技获IDG资本数千万元Pre-A轮融资  推出AI安防全场景软硬件解决方案

1月8日&#xff0c;人工智能安防公司澎思科技宣布完成数千万元 Pre-A 轮融资&#xff0c;该轮融资由 IDG 资本领投&#xff0c;高捷资本、上古资本、洪泰基金跟投。澎思科技表示&#xff0c;此轮融资会更多用来“修炼内功”&#xff0c;进一步夯实公司的技术研发和产品落地能力…

看linux书籍做的一些重要笔记(2011.07.03更新)

&#xff08;1&#xff09;制作启动盘 •用户可以用dd&#xff0c;cat&#xff0c;cp等命令自行将这些image文件制作成启动盘。 •例如&#xff1a; •ddif/mnt/cdrom/RedHat/images/bootdisk.img of/dev/fd0 •cp /mnt/cdrom/RedHat/images/bootdisk.img /dev/fd0 •cat /mnt…

C++ Primer 读书笔记 (1)

我的《C Primer》扉页记着购书的日期和地点&#xff1a;C Primer 2009.11.28购于西区求索。那时对于这本厚书一直心怀敬畏&#xff0c;仿佛是眼前的一座大山。那时&#xff0c;虽然已经大四&#xff0c;但是对于面向对象的理解还很肤浅(相当肤浅)&#xff0c;只能用C编写一些简…

招聘:兼职ASP 高级工程师

工作职责&#xff1a;1、负责ASP网站设计和页面制作&#xff1b;2、配合运营团队做客户服务支持&#xff1b;3、参与海洋工作室其他相关设计工作。 职位描述&#xff1a; 1. 要求有很强大ASP开发功底;2. SQL Server使用经验;3. 有与策划者和美工合作的习惯;4. 可独立开发&…

GitHub重大好消息:私有仓库可无限制免费创建

作者 | 一一 出品 | AI科技大本营 GitHub 被微软收购之后&#xff0c;第一次公布了有利于广大程序员的好消息。 1 月 8 日&#xff0c;GitHub 宣布无限制的免费为普通用户提供私有仓库服务&#xff0c;这给程序员每年省下了 84 美元。此前&#xff0c;企业要创建私有仓库进行代…