проблема с синглтоном в рубине - PullRequest
0 голосов
/ 18 ноября 2010

Я новичок в рубине.не должна ли функция инициализации синглтон-класса иметь аргументы?Вот мой код:

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: in `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'

T ___ T

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Поскольку это одноэлементный объект, нет необходимости передавать какие-либо параметры для инициализации, поскольку он всегда будет возвращать один и тот же объект.

Если вы хотите что-то менять в классе каждый раз, когда вы вызываете это, вы можете определить новый метод.

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 голосов
/ 18 ноября 2010

Я не уверен, что вы пытаетесь сделать, но есть много других способов получить экземпляр Singleton без использования модуля Singleton.

Лично мне нравится этот метод:

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

Если бы вы могли дать немного больше информации о , почему вы пытаетесь делать то, что делаете, это может быть полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...