我想知道是否有解决这个问题的方法,设计模块:
亚马逊拥有一个顶层名称空间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之外的其他东西。
答案 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