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

在Ruby中,我有一个包含变量的哈希值。如何获取其名称空间?,ruby,hash,namespaces,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询问

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

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询问变量'value'的名称空间'CatId'等于'Services'。我想这样做:

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

如何获取其名称空间?

我认为这是不可能的。给定“9115”这样的值,就无法知道为特定视频设置了哪些常量(除了穷举搜索,只有总数很少时才可行)


如果您需要获取这些信息,我会重新考虑您存储的数据-CatId键的值可以是包含更多信息的内容(例如包含id和文本描述的结构)

类别::服务::摄影(视频在该类中只是一个常量。它的值与模型(您称之为名称空间)没有连接;在这种情况下,它只是一个字符串。您可以再次对照它检查哈希值

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

哦,我现在明白多了

module Categories
  module Services
    PHOTOGRAPHY_VIDEO = "9115"
  end
end

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

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

谢谢你在这里帮助新来的家伙,如果没有“TypeError:can not convert String to Integer”(类型错误:无法将字符串转换为整数),我就无法运行这段代码,但即使这样做了。在服务“模型”下会有很多常量,如果传入了其中任何一个,我需要我的代码来执行某些操作。然后,您可能会在散列值中混入一些数字。尝试将该常数作为一个数字,而不是字符串。或者使用字符串将其他值放入该散列。保持一致,谢谢。为了学习编程,我正在为我妻子经常使用的网站构建一个API。gumtree.co.za所以散列键的值是根据我发布广告时网站正在寻找的内容为我设置的。因此,如果我给键一个更具描述性的值,我必须在API用户检查后,在将其传递给网站之前,对其进行重命名,我假设这不是最好的做法。那么也许你需要存储一个单独的类别ID到它们的描述/名称空间的映射,这是可行的,太棒了!我仍然希望看到一个更优雅的解决方案,如果有的话。谢谢你的尝试,我真的很感谢所有试图帮助我的人。这是我想做的最有说服力的例子,但当我尝试时,它不起作用。Ruby 1.9.3在运行它时返回false,而我需要它为true。然后,当我将“9115”替换为“Services::”时,代码返回true,这意味着这仍然只是检查变量的值,而不是变量本身。
module Categories
  module Services
    PHOTOGRAPHY_VIDEO = "9115"
  end
end

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

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