在Ruby中,我有一个包含变量的哈希值。我如何获得其命名空间?

时间:2012-10-17 13:26:13

标签: ruby hash namespaces

我有一个包含变量的哈希值:

module Categories
  module Services
    PHOTOGRAPHY_VIDEO = "9115"
  end
end

hash = {"CatId" => Categories::Services::PHOTOGRAPHY_VIDEO}

puts(hash["CatId"]) # This returns "9115" but how do I get the "Services" category?

我想问Ruby,'CatId'变量'value'的命名空间等于'Services'。我想做这样的事情:

def priced?
  (hash["CatId"]).unknown_method == Services
end

如何获取其命名空间?

3 个答案:

答案 0 :(得分:4)

我不认为这是可能的。给定诸如'9115'之类的值,除了详尽的搜索之外,没有办法知道对于特定视频已经设置了哪些常数,这种情况只有在总数很少时才有效。

如果您需要了解此信息,我会重新考虑您存储的数据 - CatId键的值可能是其中包含更多信息的内容(例如,包含id和文本描述的结构)

答案 1 :(得分:1)

Categories::Services::PHOTOGRAPHY_VIDEO只是该类中的常量。它的值与模型没有关系(你称之为命名空间);在这种情况下它只是一个字符串。您可以再次检查哈希值。

def priced?
  (hash["CatId"]) == Categories::Services::PHOTOGRAPHY_VIDEO
end

答案 2 :(得分:0)

"#{hash["CatId"]}".include? 'Services::'

更新=>

哦,我现在更明白了

module Categories
  module Services
    PHOTOGRAPHY_VIDEO = "9115"
  end
end

hash = {"CatId" => "Categories::Services::PHOTOGRAPHY_VIDEO"}

eval hash["CatId"] # => "9155"