2012-05-24 15 views
5

आरंभ करना मैं रूबी में एक सिंगलटन शुरू करने की कोशिश कर रहा हूं। यहां कुछ कोड दिया गया है:रूबी सिंगलटन

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 

समस्या यह है कि प्रारंभिकता कभी नहीं कहा जाता है और इस प्रकार सिंगलटन कभी शुरू नहीं हुआ। मैंने init विधि को शुरू करने का प्रयास किया, self.initialize, new, और self.new। कुछ भी काम नहीं किया। "मैं कर रहा हूँ प्रारंभ किया जा रहा" मुद्रित कभी नहीं किया गया था और चर प्रारंभ कभी नहीं जब मैं

my_var = MyClass.instance 

साथ instantiated मैं कैसे सेटअप सिंगलटन इतना है कि यह प्रारंभ हो जाता है कर सकते हैं? की सराहना की,

Pachun

उत्तर

6

Rubymotion (1.24+) अब using GCD for singleton creation समर्थन करने के लिए लगता है

class MyClass 
    def self.instance 
    Dispatch.once { @instance ||= new } 
    @instance 
    end 
end 
मानक lib का संदर्भ देने के लिए
+0

जानना अच्छा है, लेकिन शायद ही प्रासंगिक –

+0

@ सरडोकर यह कैसे प्रासंगिक नहीं है? यह स्वीकार्य उत्तर होना चाहिए। –

+0

@RyanRomanchuk RubyMotion एमआरआई के लिए एक बहुत अलग रनटाइम है। यही कारण है कि मैंने कहा कि यह रूबी प्रश्न के उत्तर के रूप में वास्तव में प्रासंगिक नहीं है। उत्तर भी - यह विशेष जवाब केवल मैक ओएस एक्स है। सही? –

15

मदद एक standard library for singletons नहीं है:

require 'singleton' 

class MyClass 
    include Singleton 
end 

अपने कोड को ठीक करने के लिए आप इस्तेमाल कर सकते हैं निम्नलिखित:

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 
+1

+1 :) –

+0

मुझे यह कहना चाहिए था कि मेरे पास मानक libs तक पहुंच नहीं है क्योंकि यह [rubymotion] (http://rubymotion.com/) है। लेकिन दूसरी विधि काम किया, तो बहुत बहुत धन्यवाद। – pachun

+0

मुझे विश्वास नहीं है कि रूबीमोशन मानक पुस्तकालयों के समर्थन के बिना आता है। रत्नों के लिए सीमित समर्थन है, लेकिन मानक पुस्तकालयों के बिना रुबी ओब्जे-सी के लिए एक विकल्प के रूप में रोमांचक नहीं है: कोई सॉकेट नहीं, कोई JSON नहीं, नहीं ...? – Koraktor

संबंधित मुद्दे