代码之家  ›  专栏  ›  技术社区  ›  Sim Sun

关于ruby中singleton的一个问题

  •  0
  • Sim Sun  · 技术社区  · 14 年前

    我是一个关于鲁比的新手。 singleton类的initialize函数不应该有任何参数吗? 这是我的代码:

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

    我想应该是对的。但是红宝石也告诉我:

    /usr/lib/ruby/1.8/singleton.rb:94:在“initialize”中:参数数目错误(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'
    

    特里

    2 回复  |  直到 14 年前
        1
  •  2
  •   Petrik de Heus    14 年前

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

    如果每次调用类时都要更改它,可以定义一个新方法。

    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
    
        2
  •  0
  •   jonnii    14 年前

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

    我个人喜欢这种方法:

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

    如果你能提供更多关于 为什么 你在做你正在做的事情,这可能会有所帮助。

    推荐文章