继承与; Ruby中的范围解析

时间:2014-01-29 00:22:34

标签: ruby

我试图理解为什么我需要范围解析运算符来访问继承模块中的常量而不是方法。假设:

module Foo
  SOMETHING = {:one => 1, :two => 2}
  def showit
    p SOMETHING
  end
end

class Bar
  include Foo
  def initialize 
    # why doesn't method name need scope resolution but const does?
    showit
    p Foo::SOMETHING
  end

还相关,您可以从Bar中访问Foo中声明的实例或局部变量吗?我试过这样的事情:

module Foo
  @myar = "some string"
  myvar2 = "some other string"
  def showit
    p @myvar
    p myvar2
  end
end

并在Bar类中调用showit ...打印@myvar导致nil和myvar2未定义。我希望两个字符串都可以打印......发生了什么事?

1 个答案:

答案 0 :(得分:1)

您实际上不必对常量进行范围调整。

这应该运行得很好。

class Bar
  include Foo
  def initialize 
    showit
    p SOMETHING # instead of Foo::SOMETHING
  end
end

Bar.new