2010-11-18 55 views
0

我是一个关于ruby的新手。 不应该单身类的初始化函数有任何参数吗? 这里是我的代码:关于ruby中单例的问题

require 'singleton' 
class AAA 
    attr :string , true 
    include Singleton 
    def initialize(stirng) 
     @string = "aaa"; 
    end 
end 
a = AAA.instance("simpleton"); 
puts a.string 

我认为应该correct.but红宝石还告诉我:

/usr/lib/ruby/1.8/singleton.rb:94:in`初始化“:错误的参数数目(0 1)(引发ArgumentError)

from /usr/lib/ruby/1.8/singleton.rb:94:in `new' 
from /usr/lib/ruby/1.8/singleton.rb:94:in `instance' 

T___T

回答

2

由于它是一个单例,所以不需要传递任何参数来初始化,因为它总是返回相同的对象。

如果您想在每次调用该类时更改某些内容,则可以定义一种新方法。

require 'singleton' 
class AAA 
    attr :string , true 
    include Singleton 
    def initialize 
     @string = "aaa"; 
    end 
    def self.change(string) 
     instance.string = string 
     instance 
    end 
end 
a = AAA.change("simpleton"); 
puts a.string 
0

我不是确定你想要做什么,但是有很多其他方法可以在不使用Singleton模块的情况下获得单例实例。

我个人很喜欢这种方法:

class Foo 
    def self.instance 
    @__instance__ ||= new 
    end 
end 

如果你可以给多一点有关为什么你试图做你正在做的事情可能会有所帮助。

+1

只是为了学习...〜_〜 – 2010-11-18 18:20:13

+0

如果你学习,你也应该为什么单例模式是“坏”的阅读起来。在Ruby等语言中并不是什么大事,但在java/C#中并不推荐。 – jonnii 2010-11-18 18:51:28

+5

-1:这个重新发明的车轮不是线程安全的。 – 2010-11-18 22:55:43