2010-07-29 39 views
5

我有一个常数和变量的模块。如何包含模块的常量和变量?

我想知道如何将这些包含在课堂中?

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 

这可能吗?

+0

的变量是,恒定是不可能的转移。 – 2010-07-29 00:53:13

回答

3

做你想要的东西是不可能的。实例变量严格按照每个对象。

这恰好符合你的期望,但@text设置在Windows而不是Software

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

常数呢? – 2010-07-29 00:52:54

+1

'像我的例子一样'include Software'就可以做到。它只会包含在元类中 - 所以你可以在类方法中使用“VAR”,但不能使用实例方法。这是你想要的吗? – taw 2010-07-29 01:45:56

9

红宝石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:

exited 
hejsan 
exited 
+0

您可以请给您的答案添加一点解释。 – 2017-09-28 08:01:43

+0

对不起,这是一段时间。天哪,这不是一个很好的问题或答案。但是你可能因为想做类似的事情而来到这里。也许如果你问一个新问题或者详细说明你在找什么? – kwerle 2017-09-29 15:36:04

+0

不,这是一个很好的答案,但正在寻找一个我不明白的东西的解释。如果你能解释什么是包含的方法,什么是接收者,什么是receiver.send:include和receiver.extend,那将是非常有用的。包括 – 2017-09-29 16:14:21