初始化ruby单例

初始化ruby单例,ruby,singleton,initialization,rubymotion,Ruby,Singleton,Initialization,Rubymotion,我正在尝试在ruby中初始化一个单例。下面是一些代码: class MyClass attr_accessor :var_i_want_to_init # singleton @@instance = MyClass.new def self.instance @@instance end def initialize # tried 1. initialize, 2. new, 3. self.initialize, 4. self.new puts

我正在尝试在ruby中初始化一个单例。下面是一些代码:

class MyClass
  attr_accessor :var_i_want_to_init

  # singleton
  @@instance = MyClass.new
  def self.instance
    @@instance
  end

  def initialize # tried 1. initialize, 2. new, 3. self.initialize, 4. self.new
    puts "I'm being initialized!"
    @var_i_want_to_init = 2
  end
end
问题是从未调用initialize,因此singleton从未初始化。我尝试将init方法命名为initialize、self.initialize、new和self.new。什么都没用。“I'm being initialized”(我正在初始化)从未打印过,当我用

my_var = MyClass.instance
如何设置singleton以使其初始化?感谢您的帮助

巴春有一个:

要修复代码,可以使用以下方法:

class MyClass
  attr_accessor :var_i_want_to_init

  def self.instance
    @@instance ||= new
  end

  def initialize # tried 1. initialize, 2. new, 3. self.initialize, 4. self.new
    puts "I'm being initialized!"
    @var_i_want_to_init = 2
  end
end
Rubymotion(1.24+)现在似乎支持


我应该说我没有访问标准libs的权限,因为它是。但是第二种方法奏效了,非常感谢。我不能相信RubyMoon没有标准库的支持。对gems的支持有限,但是没有标准库的Ruby作为Obj-C的替代品不是那么令人兴奋:没有套接字,没有JSON,没有…?苹果做了很多事情:大量的套接字lib(afsocket-CFSocket),nsjson序列化,等等。人们开始用更像Ruby的语法打包所有苹果提供的lib。查找“ruby motion bubblewrap”,在使用标准单例模块时,如何初始化实例变量?很好地了解,但很难relevant@sardaukar这怎么不相关?这应该是公认的答案。@RyanRomanchuk RubyMotion是一个与MRI截然不同的运行时。这就是为什么我说它与回答Ruby问题无关。Ans也-此特定答案仅适用于Mac OS X。对吗?噢,OP标记了rubymotion,我想这是一个RM问题,不是ruby。
class MyClass
  attr_accessor :var_i_want_to_init

  def self.instance
    @@instance ||= new
  end

  def initialize # tried 1. initialize, 2. new, 3. self.initialize, 4. self.new
    puts "I'm being initialized!"
    @var_i_want_to_init = 2
  end
end
class MyClass
  def self.instance
    Dispatch.once { @instance ||= new }
    @instance
  end
end