我有一个问题,我有2个模块具有不同的名称但相同的变量名称。现在,即使我在类中包含第二个模块,它仍然会从第一个模块中获取变量值。
# FILE name ABC.rb (path C:/my/ABC.rb)
module one
a= 10
end
# FILE name DEF.rb (path C:/my/DEF.rb)
module two
a=15
end
# FILE name MyClass.rb
require C:/my/DEF.rb
Class MyClass
include two
def setup
puts a
end
end
结果是
10
请帮助,因为我想在两个模块中保持变量名相同。
答案 0 :(得分:1)
请注意@numNotes
是一个实例变量,属于对应类的对象,而不是模块
换句话说,如果在类中包含两个模块,则只有一个公共@numNotes
变量,而不是两个具有相同名称的变量。
另外,如果我运行你的代码,我会得到:
NameError: undefined local variable or method `majorNum' for #<ScaleDemo:0x007f8c528d6ef0>
所以请更正示例代码与您的完全相同
答案 1 :(得分:0)
如果您不包含A
,则majorNum
将无法使用;你可能做错了什么,或者需要重新启动你的环境/类/等。
除此之外,你要做的事情是行不通的:混合之后,你有两个模块试图定义相同的实例变量:最后定义的那个将获胜。
如何解决这个问题取决于你的实际目标;如果ScaleDemo
旨在表示单个量表,那么您无论如何只会混合使用单个版本(我并不完全相信混合是这样做的方式,但这是一个不同的问题)。
module One
@@a = 10
end
module Two
@@a = 15
end
class MyClass
include Two
def setup
puts @@a
end
end
> c = MyClass.new
=> #<MyClass:0x94ab114>
> c.setup
15