我想用一个Class(而不是一个符号!)来索引哈希,如下面的
irb(main):015:0> class Key ;end
=> nil
irb(main):016:0> h={Key => "ok"}
=> {Key=>"ok"}
好。 然后,给定Class的名称,作为字符串,我想得到元素:
irb(main):017:0> str="Key"
=> "Key"
irb(main):018:0> h[str]
=> nil
但是(如上所示)这失败了(当然)。
所以我的问题是:如何将String转换为实际的类?
答案 0 :(得分:6)
如果你正在使用Rails,那么你会发现ActiveSupport的“constantize”可以做你想要的。
"String".constantize
=> String
但你可以做类似的事情。
Object.const_get("String")
=> String
您甚至可以在字符串
上定义它class String
def constantize
Object.const_get(self)
end
end
注意:除非你真的需要,否则尽量避免做“eval”。
答案 1 :(得分:3)
您可以使用Kernel#const_get
:
str = "Key"
k = Kernel.const_get(str)
val = h[k]
答案 2 :(得分:0)
你可以这样做(你可能不想使用eval
):
>> class Key ;end #=> nil
>> h={Key => "ok"} #=> {Key=>"ok"}
>> str="Key" #=> "Key"
>> h[Kernel.const_get(str)] #=> "ok"
答案 3 :(得分:-3)
您可以使用h[eval(str)]
。有关eval in the Ruby 1.9.3 docs