初始化ruby singleton

pac*_*hun 6 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 "I'm being initialized!"
    @var_i_want_to_init = 2
  end
end
Run Code Online (Sandbox Code Playgroud)

问题是从不调用initialize,因此单例永远不会初始化.我尝试命名init方法initialize,self.initialize,new和self.new.没有任何效果."我正在初始化"从未打印过,变量从未在我实例化时初始化

my_var = MyClass.instance
Run Code Online (Sandbox Code Playgroud)

如何设置单例以使其初始化?帮助赞赏,

Pachun

Kor*_*tor 18

有一个单身人士标准库:

require 'singleton'

class MyClass
  include Singleton
end
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • 使用标准Singleton模块时如何初始化实例变量? (2认同)

k10*_*107 6

Rubymotion(1.24+)现在似乎支持使用GCD进行单例创建

class MyClass
  def self.instance
    Dispatch.once { @instance ||= new }
    @instance
  end
end
Run Code Online (Sandbox Code Playgroud)