如何包含模块的常量和变量?
我有一个常数和变量的模块。如何包含模块的常量和变量?
我想知道如何将这些包含在课堂中?
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
这可能吗?
做你想要的东西是不可能的。实例变量严格按照每个对象。
这恰好符合你的期望,但@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
常数呢? – 2010-07-29 00:52:54
'像我的例子一样'include Software'就可以做到。它只会包含在元类中 - 所以你可以在类方法中使用“VAR”,但不能使用实例方法。这是你想要的吗? – taw 2010-07-29 01:45:56
红宝石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
您可以请给您的答案添加一点解释。 – 2017-09-28 08:01:43
对不起,这是一段时间。天哪,这不是一个很好的问题或答案。但是你可能因为想做类似的事情而来到这里。也许如果你问一个新问题或者详细说明你在找什么? – kwerle 2017-09-29 15:36:04
不,这是一个很好的答案,但正在寻找一个我不明白的东西的解释。如果你能解释什么是包含的方法,什么是接收者,什么是receiver.send:include和receiver.extend,那将是非常有用的。包括 – 2017-09-29 16:14:21
的变量是,恒定是不可能的转移。 – 2010-07-29 00:53:13