2010-07-29 41 views
5

Sabit ve değişkenli bir Modülüm var.Modülün sabitleri ve değişkenleri nasıl eklenir?

Bunları bir sınıfa nasıl ekleyebilirim?

module Software 
    VAR = 'hejsan' 

    def exit 
    @text = "exited" 
    puts @text 
    end 
end 

class Windows 
    extend Software 
    def self.start 
    exit 
    puts VAR 
    puts @text 
    end 
end 

Windows.start 

Bu mümkün mü?

+0

sabit aktarmak mümkün değildi. –

cevap

3

Tam olarak ne istediğinizi yapmak mümkün değildir. Örnek değişkenler kesinlikle nesne başına.

Bu, beklediğiniz gibi olur, ancak @text, WindowsSoftware değil ayarlanmıştır.

module Software 
    VAR = 'hejsan' 

    def exit 
    @text = "exited" 
    puts @text 
    end 
end 

class Windows 
    class <<self 
    include Software 
    def start 
     exit 
     puts VAR 
     puts @text 
    end 
    end 
end 

Windows.start 
+0

sabit hakkında ne? –

+1

'Yazılımın içerdiği örnekte olduğu gibi yapacaktır. Sadece meta sınıfta yer alacaktır - böylece sınıf yöntemlerinden 'VAR'ı kullanabilirsiniz, ancak örnek yöntemlerini kullanamazsınız. İstediğin bu mu? – taw

9

Ruby 1.9.3:

module Software 
    VAR = 'hejsan' 

    module ClassMethods 
    def exit 
     @text = "exited" 
     puts @text 
    end 
    end 

    module InstanceMethods 

    end 

    def self.included(receiver) 
    receiver.extend   ClassMethods 
    receiver.send :include, InstanceMethods 
    end 
end 

class Windows 
    include Software 
    def self.start 
    exit 
    puts VAR 
    puts @text 
    end 
end 

Windows.start 

IRB olarak:

değişken
exited 
hejsan 
exited 
+0

Lütfen cevabınıza biraz açıklama ekleyebilir misiniz? –

+0

Üzgünüz, bir süredir var. Tanrım, bu harika bir soru ya da cevap değil. Ama muhtemelen buraya geldin çünkü benzer bir şey yapmak istiyorsun. Belki yeni bir soru sorarsanız veya aradığınız şey hakkında ayrıntılı bilgi verirseniz? – kwerle

+0

Hayır, bu harika bir cevap ama anlamadığım bir şey için bir açıklama arıyordu. Dahil edilen yöntemi, alıcı nedir, receiver.send nedir: include ve receiver.extend öğelerini açıklayabilirseniz çok yararlı olacaktır. –

İlgili konular