之所以喜欢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产生的实例都是同一个实例。
分享到:
相关推荐
* 返回的构造函数会执行名为 initialize 的方法, initialize 是 Ruby 对象的构造器方法名字。 * 此时initialize方法还没有定义,其后的代码中创建新类型时会建立相应的同名方法。 * * 如果一定要从java上去理解...
包装器将本机Ruby对象与API可以理解的JSON表示形式相互转换。 例如, client = OandaAPI :: Client :: TokenClient . new ( :practice , "practice_account_token" ) account = client . account ( 12345 ) . get...
马尔可夫报价马尔可夫随机报价文本生成器主要只是演示如何在 Ruby 中使用。用法 mq=MarkovQuote.new()puts mq.generate示例生成的报价美国是翻译中迷失的东西。 人类处于无可指责的维斯塔的地盘! 这个世界不劳而获...
恩基 面向时尚开发人员的Ruby on Rails博客应用程序。 偏好是针对大众的。 任何真正的程序员都知道定制东西的最简单,最好的方式是破解代码。 因为您希望自己成为博客,所以不要以每页20条而不是15条标准安装#4958...
类型被隐式理解,并被自动设置/加载。 仅排除符号。 有4个主要功能: 放 db [键] =值 db = Gkv :: Database . new db [ 'Pants' ] = 'red leather' # => 'red leather' 这允许使用运算符重载来设置速记符号,而...
理解 Ajax 及其工作原理,构建网站的一种有效方法 Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本系列的作者是一位 Ajax 专家,他...
new ( :name => "Jon Doe" , :line_1 => "12345 Somewhere Ln" , :line_2 => nil , :city => "Bentley" , :region => "WA" , :postal_code => "6102" , :country => "AU" ) . to_s => "Jon Doe \n 1
...)的Ruby库和环境,特别适合通过算法或参数的变化来优化结果的实验。 安装 $ sudo gem install experiment 还要确保您正在运行最新版本的gem update experiment 。 入门 实验是在rails之后进行建模的,工作流...
方法命名遵循 Haskell 约定,因此 gem 可用于尝试理解 monad(主要在使用 Haskell 的教程中描述)。 单子实现: 身份(用于教育目的) 也许 列表 延续 同时 安装 将此行添加到应用程序的 Gemfile 中: gem '...
顺便再强调一下,服务器端不止是可以用 PHP 来编写,你同样可以使用其它语言(比如 Java,.NET,Ruby,Python 等),这里我们只是以 PHP 为例而已。在这个例子中你还会看到如何使用加密传输。 view plaincopy to ...
顺便再强调一下,服务器端不止是可以用 PHP 来编写,你同样可以使用其它语言(比如 Java,.NET,Ruby,Python 等),这里我们只是以 PHP 为例而已。在这个例子中你还会看到如何使用加密传输。 view plaincopy to ...
顺便再强调一下,服务器端不止是可以用 PHP 来编写,你同样可以使用其它语言(比如 Java,.NET,Ruby,Python 等),这里我们只是以 PHP 为例而已。在这个例子中你还会看到如何使用加密传输。 view plaincopy to ...
顺便再强调一下,服务器端不止是可以用 PHP 来编写,你同样可以使用其它语言(比如 Java,.NET,Ruby,Python 等),这里我们只是以 PHP 为例而已。在这个例子中你还会看到如何使用加密传输。 view plaincopy to ...
顺便再强调一下,服务器端不止是可以用 PHP 来编写,你同样可以使用其它语言(比如 Java,.NET,Ruby,Python 等),这里我们只是以 PHP 为例而已。在这个例子中你还会看到如何使用加密传输。 view plaincopy to ...
顺便再强调一下,服务器端不止是可以用 PHP 来编写,你同样可以使用其它语言(比如 Java,.NET,Ruby,Python 等),这里我们只是以 PHP 为例而已。在这个例子中你还会看到如何使用加密传输。 view plaincopy to ...
顺便再强调一下,服务器端不止是可以用 PHP 来编写,你同样可以使用其它语言(比如 Java,.NET,Ruby,Python 等),这里我们只是以 PHP 为例而已。在这个例子中你还会看到如何使用加密传输。 view plaincopy to ...
)需要Ruby 1.9或2.0。 现在,这是本书中相当粗略的代码转储。 每章都有自己的目录: 第2章:第三章:第4章:第5章:第六章:什么都不做FizzBuzz与procs λ演算第7章:普遍性无处不在部分递归函数SKI组合器演算...
重要 master分支包含前沿开发代码。 检查branches或tags以获取最新的稳定版本或特定版本。 帕洛玛 Rails的页面特定javascript正确完成。 优点 选择每页要运行的特定JavaScript代码。... 轻松在您的javascript文件... new
重点是git open , git pull-request , git push-branch和git undo ,如果没有它们,您将永远无法理解。 git-utils以前是纯Bash脚本,但现在可以作为Ruby gem使用: gem install git-utils有关git-utils定义的命令...
Google搜索会努力理解页面的内容。 您可以通过提供有关页面含义的明确线索来帮助我们。 。 。用法假设您有一个Rails应用。 如果将其放在控制器中: @public_law = Organization . new ( name : 'Public.Law' , ...