引用另一个模块时的嵌套模块

时间:2011-12-14 09:22:49

标签: ruby

我想知道是否有解决这个问题的方法,设计模块:

亚马逊拥有一个顶层名称空间AWS的模块。它包含AWS :: EC2等。

我正在编写一个提供更多AWS功能的模块。我想称之为MY_ORG_NAME :: AWS。它有像MY_ORG_NAME :: AWS.instance_id。

这样的方法 然而,我遇到了绊脚石:

require 'aws-sdk'

module MY_ORG_NAME
  module AWS
    def self.instance_id
      ec2 = AWS::EC2.new  # Error
      ...
    end
  end
end

解释器返回上面该行的错误:*未初始化的常量MY_ORG_NAME :: AWS :: EC2 *。我看到发生了什么。但我不确定我能做些什么呢。看起来问题是亚马逊没有将他们的AWS模块放入模块名称空间,如AMAZON。

有没有一些简单的方法来解决这个问题,或者我犯了一些错误?我目前最好的想法是将我的AWS模块称为AWS之外的其他东西。

2 个答案:

答案 0 :(得分:3)

不是吗?

module MY_ORG_NAME
  module AWS
    def self.instance_id
      ec2 = ::AWS::EC2.new # <-- :: goes to the top-level namespace
      ...
    end
  end
end

答案 1 :(得分:1)

嗯,你可以“别名”亚马逊一个。像这样修改你的代码:

require 'aws-sdk'

Amazon = AWS

module MY_ORG_NAME
  module AWS
    def self.instance_id
      ec2 = Amazon::EC2.new
      ...
    end
  end
end