2个具有相同变量的模块

时间:2011-12-21 12:41:00

标签: ruby

我有一个问题,我有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

请帮助,因为我想在两个模块中保持变量名相同。

2 个答案:

答案 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