【问题标题】:2 Modules with same Variables2 个具有相同变量的模块
【发布时间】:2012-01-25 06:36:02
【问题描述】:

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

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

【问题讨论】:

    标签: ruby


    【解决方案1】:

    如果不包含AmajorNum 将不可用;您可能做错了什么,或者需要重新初始化您的环境/类/等。

    除此之外,您尝试做的事情不会起作用:混合后,您有两个模块将尝试定义相同的实例变量:最后定义的模块将获胜。

    如何解决取决于你的实际目标;如果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
    

    【讨论】:

    • 非常感谢您的投入,我在我的问题中添加了一个新示例,请查看并提供解决方案,非常感谢 Inder
    • @user606011 那不是你真正的代码。不能剪切粘贴吗?
    • @user606011 考虑使用类变量;为了让它成为一个实例变量,你需要做更多的工作,这已经有点超出你的专业水平了——现在保持简单。
    • 我同意你,戴夫。但是我的问题是,在我的自动化框架中,我必须在一个类中继承多个模块(mixin)。我有两个应用程序(它们非常相似,代码更改最少),它们的值不断变化。第一个应用程序数据在一组模块中,其他的数据在第二组模块中。变量名称相同但值不同(30% 的时间)。类代码完全相同,只是我包含的模块集不同。更改变量名会消耗大量时间。任何其他解决方案将不胜感激-谢谢---Inder
    【解决方案2】:

    注意@numNotes是一个实例变量,属于对应类的对象,不是模块
    换句话说,如果你在你的类中包含这两个模块,那么只有一个常见的@numNotes 变量,而不是两个同名的变量。

    另外,如果我运行你的代码,我会得到:

    NameError: undefined local variable or method `majorNum' for #<ScaleDemo:0x007f8c528d6ef0>
    

    所以请更正示例代码以与您的完全相同

    【讨论】:

    • 对不起,如果我在下面混淆的示例是正确复制我的问题 *********************** 文件名 ABC.rb (路径 C:/my/ABC.rb) 模块一 a= 10 end ************** 文件名 DEF.rb (路径 C:/my/DEF.rb) 模块二 a= 15 end ********** 文件名 MyClass.rb 需要 C:/my/DEF.rb Class MyClass 包括两个 def setup 结束 ************** **** 结果是 10
    • 你应该把它放在你的问题中
    • 非常感谢您的投入,我在我的问题中添加了一个新示例,请查看并提供解决方案,非常感谢 Inder
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2021-09-15
    • 2021-05-28
    • 2017-03-26
    • 1970-01-01
    • 2020-01-12
    相关资源
    最近更新 更多