`
piecehealth
  • 浏览: 47792 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby new方法的理解。

阅读更多
之所以喜欢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产生的实例都是同一个实例。
分享到:
评论

相关推荐

    Ruby-NewRelic找到并修复Ruby错误使用NewRelic的应用程序监控和故障诊断

    在压缩包文件“rpm-master”中,可能包含了New Relic的Ruby代理(Agent)源代码,这个代理会被集成到Ruby应用程序中,负责收集性能数据并上报到New Relic服务器。通过分析和理解这个源码,开发者可以更深入地了解New...

    Ruby元编程第二版中文

    2. **类与模块操作**:Ruby的`Class.new`和`Module.new`可以用来动态创建类和模块。`class_eval`和`module_eval`允许在类或模块上下文中执行字符串或块作为代码。 3. **对象的反射**:`Object#methods`、`Class#...

    Ruby-Ruby的面向对象的枚举

    Ruby的枚举通常指的是枚举类(Enum Class),这是一种自定义枚举类型的方法,允许我们创建具有特定行为的枚举。在本篇文章中,我们将深入探讨Ruby如何实现面向对象的枚举以及它在实际开发中的应用。 首先,让我们...

    ruby和redis接口

    通过这个接口,开发者可以更容易地在Ruby环境中配置和操作Redis集群,而无需深入理解集群内部的工作原理。这可能包括节点的添加、删除、故障检测和恢复等功能。 标签中提到了"redis-3.0.0.",这意味着该工具或接口...

    ruby metaprograming

    在Ruby中,几乎所有的类都是开放的,这意味着可以在任何地方添加新的方法到一个已存在的类上。 **示例**: ```ruby class String def reverse_words words = self.split(' ') reversed_words = words.map(&:...

    Ruby-DingTalkBot是阿里钉钉自定义机器人的Ruby库

    开发者可以通过阅读源码了解其内部实现,参考示例快速上手,通过文档理解各个方法的功能和使用方式,而测试用例则可以帮助验证库的正确性。 为了使用Ruby-DingTalkBot,首先需要在项目中引入库(通过Gemfile或直接...

    ruby使用json库

    然后,`JSON.parse`方法可以将JSON字符串转化为Ruby的数据结构,如哈希或数组。例如: ```ruby require 'json' json_string = '{"name":"John", "age":30, "city":"New York"}' parsed_data = JSON.parse(json_...

    Ruby入门教程中文PDF 附实例

    本教程针对初学者,旨在帮助读者快速掌握Ruby的基础知识,并通过实例深入理解其用法。 首先,Ruby的基本语法是它的一大亮点。Ruby允许开发者以更自然的方式编写代码,这得益于它的语法接近于英语。例如,变量的声明...

    ruby文件操作,简单ppt

    在 Ruby 中,可以使用 `File.new` 方法来创建一个新的文件对象。例如: ```ruby file = File.new(File.join("F:/ruby", "aaa.txt"), "w+") ``` 这里有两个重要的参数需要关注: - **第一个参数**:表示文件的路径...

    Working with Ruby Threads

    因此,理解和掌握Ruby中的线程技术变得尤为重要。 #### 多线程编程的承诺 多线程编程能够显著提高程序的执行效率和响应速度,尤其是在处理I/O密集型任务时。通过将计算任务分解成多个独立的线程,可以在等待一个...

    Ruby-RubyGraphVizGraphViz绘图工具的Ruby接口

    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教程中文版和安装文件

    通过阅读和实践教程中的例子,你可以逐步提升对Ruby的理解和应用能力。 总的来说,Ruby是一门易学易用的编程语言,尤其适合Web开发和脚本编写。它的强大功能和灵活语法使得编程变得更加愉快。希望这个基础教程和...

    Hprose ruby 说明文档

    **正文** Hprose 是一个轻量级、跨语言、跨平台的开源远程对象服务引擎。它被设计用来简化分布式应用的开发...通过深入理解其核心概念、使用方法以及特性,开发者可以充分利用 Hprose 实现高效、稳定的远程服务调用。

    ruby学习的源码

    - "codes":可能是一些Ruby或Rails的代码片段,可以帮助理解语言特性和实践技巧。 通过深入学习这些内容,初学者不仅可以掌握Ruby的基础,还能熟悉Rails的开发流程,进一步提升Web开发能力。同时,不断实践和阅读...

    Ruby-qtbindings允许你在Ruby中使用QTGui工具包

    通过qtbindings,Ruby程序员可以直接调用QT的类和方法,创建复杂的窗口应用、控件、布局和信号与槽机制,而无需离开熟悉的Ruby环境。 这个项目的核心在于其绑定技术,它将C++的QT库转换为Ruby可以理解和操作的对象...

    ruby入门练习题.zip

    3. **类与对象**:在Ruby中,你可以定义自己的类,比如`Person`,然后通过`new`方法创建该类的对象。类包含属性(或称为实例变量)和方法(或称为成员函数)。 4. **方法**:Ruby的方法可以看作是可重用的代码块,...

    ruby 资源(代码范例)

    类是创建对象的模板,通过`class`关键字定义,`new`方法用于创建对象。 接下来,我们深入到Rails框架中: 1. **路由**:Rails的路由系统将URL映射到控制器的行动,定义了应用的导航结构。通过`config/routes.rb`...

    Ruby 连接数据库资源汇总

    Ruby 是一种动态、开源的编程语言,以其简洁和表达力强的特点...对于初学者来说,理解这些概念和示例代码是学习Ruby数据库编程的关键步骤。在实际项目中,结合具体的业务需求,开发者可以根据情况选择合适的连接方式。

    Ruby-TDD实战TestDrivenDevelopmentinAction

    **Ruby-TDD实战:Test Driven Development in Action** 在软件开发领域,Test-Driven Development(TDD)是一种编程...无论你是Ruby新手还是经验丰富的开发者,深入理解和实践TDD都将对你的职业生涯产生积极的影响。

    Ruby-SQLite3Ruby绑定SQLite3嵌入式数据库

    本文将深入探讨Ruby-SQLite3的使用方法、核心特性以及在实际开发中的应用。 首先,我们来了解如何在Ruby项目中安装SQLite3库。通过Ruby的包管理工具RubyGems,可以简单地执行以下命令来安装: ```bash gem install...

Global site tag (gtag.js) - Google Analytics