ruby中的一个关于单例的问题

发布于 2024-10-03 17:27:27 字数 545 浏览 1 评论 0原文

我是红宝石的新手。 单例类的初始化函数不应该有任何参数吗? 这是我的代码:

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

i am a newbie about ruby.
should not the singleton class`s initialize function have any arguments?
here is my code:

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

i think should be correct.but the ruby also tell me :

/usr/lib/ruby/1.8/singleton.rb:94:in `initialize': wrong number of arguments (0 for 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

丑疤怪 2024-10-10 17:27:27

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

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

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

Since it's a singleton there's no need for passing any parameters to initialize, because it will always return the same object.

If you want to change something on the class everytime you call it you could define a new method.

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
面如桃花 2024-10-10 17:27:27

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

我个人喜欢这种方法:

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

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

I'm not sure what you're trying to do but there are plenty of other ways to get a singleton instance without using the Singleton module.

I personally like this method:

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

If you could give a little more information about why you're trying to do what you're doing it might be helpful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文