之所以喜欢ruby,是因为理解ruby后,用ruby解释所有东西都那么自然。比如别的语言创建对象都是Xxx instance = new Xxx(),不要问为什么,就是要这么写。当然Ruby创建对象是instance = Xxx.new,但是这里,我们可以用ruby的commonsense来解释。
Xxx.new可以看成Xxx执行了一个类方法:new,运行以下代码便知。
class Test
def self.new *args, &blk
puts *args.join(',')
end
def initialize a, b, c
puts "Kan Bu Jian Wo!!"
end
end
Test.new(1, 2, 3) # 1,2,3
由上可知,ruby创建实例实际是调用了类的方法new,所以我们重写了new方法所以就创建不出实例了。
最后献上根据以上解释写出的单例模式:
module Singleton
def self.included(klass)
klass.class_eval do
(class << self; self; end).class_eval do
alias_method :original_new, :new
def new *args, &blk
@instance ||= original_new(*args, &blk)
end
end
end
end
end
class Test
include Singleton
end
tst1 = Test.new
tst2 = Test.new
puts tst1.object_id
puts tst2.object_id
include Singleton模块的所有类通过new产生的实例都是同一个实例。
分享到:
相关推荐
在压缩包文件“rpm-master”中,可能包含了New Relic的Ruby代理(Agent)源代码,这个代理会被集成到Ruby应用程序中,负责收集性能数据并上报到New Relic服务器。通过分析和理解这个源码,开发者可以更深入地了解New...
2. **类与模块操作**:Ruby的`Class.new`和`Module.new`可以用来动态创建类和模块。`class_eval`和`module_eval`允许在类或模块上下文中执行字符串或块作为代码。 3. **对象的反射**:`Object#methods`、`Class#...
Ruby的枚举通常指的是枚举类(Enum Class),这是一种自定义枚举类型的方法,允许我们创建具有特定行为的枚举。在本篇文章中,我们将深入探讨Ruby如何实现面向对象的枚举以及它在实际开发中的应用。 首先,让我们...
通过这个接口,开发者可以更容易地在Ruby环境中配置和操作Redis集群,而无需深入理解集群内部的工作原理。这可能包括节点的添加、删除、故障检测和恢复等功能。 标签中提到了"redis-3.0.0.",这意味着该工具或接口...
在Ruby中,几乎所有的类都是开放的,这意味着可以在任何地方添加新的方法到一个已存在的类上。 **示例**: ```ruby class String def reverse_words words = self.split(' ') reversed_words = words.map(&:...
开发者可以通过阅读源码了解其内部实现,参考示例快速上手,通过文档理解各个方法的功能和使用方式,而测试用例则可以帮助验证库的正确性。 为了使用Ruby-DingTalkBot,首先需要在项目中引入库(通过Gemfile或直接...
然后,`JSON.parse`方法可以将JSON字符串转化为Ruby的数据结构,如哈希或数组。例如: ```ruby require 'json' json_string = '{"name":"John", "age":30, "city":"New York"}' parsed_data = JSON.parse(json_...
本教程针对初学者,旨在帮助读者快速掌握Ruby的基础知识,并通过实例深入理解其用法。 首先,Ruby的基本语法是它的一大亮点。Ruby允许开发者以更自然的方式编写代码,这得益于它的语法接近于英语。例如,变量的声明...
在 Ruby 中,可以使用 `File.new` 方法来创建一个新的文件对象。例如: ```ruby file = File.new(File.join("F:/ruby", "aaa.txt"), "w+") ``` 这里有两个重要的参数需要关注: - **第一个参数**:表示文件的路径...
因此,理解和掌握Ruby中的线程技术变得尤为重要。 #### 多线程编程的承诺 多线程编程能够显著提高程序的执行效率和响应速度,尤其是在处理I/O密集型任务时。通过将计算任务分解成多个独立的线程,可以在等待一个...
g = GraphViz.new(:G, type: :digraph) # 添加节点 node1 = g.add_nodes("node1") node2 = g.add_nodes("node2") # 添加边 g.add_edges(node1, node2) # 输出图像 g.output(png: "example.png") ``` 这段代码将...
通过阅读和实践教程中的例子,你可以逐步提升对Ruby的理解和应用能力。 总的来说,Ruby是一门易学易用的编程语言,尤其适合Web开发和脚本编写。它的强大功能和灵活语法使得编程变得更加愉快。希望这个基础教程和...
**正文** Hprose 是一个轻量级、跨语言、跨平台的开源远程对象服务引擎。它被设计用来简化分布式应用的开发...通过深入理解其核心概念、使用方法以及特性,开发者可以充分利用 Hprose 实现高效、稳定的远程服务调用。
- "codes":可能是一些Ruby或Rails的代码片段,可以帮助理解语言特性和实践技巧。 通过深入学习这些内容,初学者不仅可以掌握Ruby的基础,还能熟悉Rails的开发流程,进一步提升Web开发能力。同时,不断实践和阅读...
通过qtbindings,Ruby程序员可以直接调用QT的类和方法,创建复杂的窗口应用、控件、布局和信号与槽机制,而无需离开熟悉的Ruby环境。 这个项目的核心在于其绑定技术,它将C++的QT库转换为Ruby可以理解和操作的对象...
3. **类与对象**:在Ruby中,你可以定义自己的类,比如`Person`,然后通过`new`方法创建该类的对象。类包含属性(或称为实例变量)和方法(或称为成员函数)。 4. **方法**:Ruby的方法可以看作是可重用的代码块,...
类是创建对象的模板,通过`class`关键字定义,`new`方法用于创建对象。 接下来,我们深入到Rails框架中: 1. **路由**:Rails的路由系统将URL映射到控制器的行动,定义了应用的导航结构。通过`config/routes.rb`...
Ruby 是一种动态、开源的编程语言,以其简洁和表达力强的特点...对于初学者来说,理解这些概念和示例代码是学习Ruby数据库编程的关键步骤。在实际项目中,结合具体的业务需求,开发者可以根据情况选择合适的连接方式。
**Ruby-TDD实战:Test Driven Development in Action** 在软件开发领域,Test-Driven Development(TDD)是一种编程...无论你是Ruby新手还是经验丰富的开发者,深入理解和实践TDD都将对你的职业生涯产生积极的影响。
本文将深入探讨Ruby-SQLite3的使用方法、核心特性以及在实际开发中的应用。 首先,我们来了解如何在Ruby项目中安装SQLite3库。通过Ruby的包管理工具RubyGems,可以简单地执行以下命令来安装: ```bash gem install...