Luk*_*ick 3 ruby singleton coding-style
在java中,我会创建这样的东西:
private static MyClass instance;
public static MyClass getInstance() {
if(instance != null) {
return instance;
}
instance = new MyClass();
return instance;
}
Run Code Online (Sandbox Code Playgroud)
在 ruby 中获得相同功能的合适方法是什么?
更新:我已经阅读了关于“包含单例”的内容,但是当我尝试在 Ruby 1.9 上的 irb 中执行此操作时,我得到了:
[vertis@raven:~/workspace/test]$ ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin9.4.0]
[vertis@raven:~/workspace/test]$ irb
irb(main):001:0> class TestTest
irb(main):002:1> include Singleton
irb(main):003:1> end
NameError: uninitialized constant TestTest::Singleton
from (irb):2:in `<class:TestTest>'
from (irb):1
from /usr/local/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)
已经有关于如何在 Ruby 中执行此操作的答案,但我首先要问您是否需要这样做?
无需将您的 Java 模式复制到 Ruby。我从 2005 年开始使用 Ruby,从来不需要单例类。
为什么你需要一个实例?为什么不能只定义类方法并在类上调用它们。
据我了解,您正在尝试以下方法:
instance = Klass.new
instance.foo
.. then somewhere else
instance = Klass.new # expecting this to return the same instance
instance.bar
Run Code Online (Sandbox Code Playgroud)
但是你可以这样做:
Klass.foo
... in other place
Klass.bar
Run Code Online (Sandbox Code Playgroud)
而且由于只有一类 Klass,您的问题本机就解决了,而且输入的内容也更少:)
Ruby 中的类只是类 Class 的实例,因此它们可以拥有实例可以拥有的一切。
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |