如何从String中获取类?

JCL*_*CLL 0 ruby string class constants

我想用一个Class(不是符号!)索引哈希,如下所示

irb(main):015:0> class Key ;end
=> nil
irb(main):016:0> h={Key => "ok"}
=> {Key=>"ok"}
Run Code Online (Sandbox Code Playgroud)

好.然后,给定Class的名称,作为字符串,我想得到元素:

irb(main):017:0> str="Key"
=> "Key"
irb(main):018:0> h[str]
=> nil
Run Code Online (Sandbox Code Playgroud)

但是(如上所示)这失败了(当然).

所以我的问题是:如何将String转换为实际的类?

Mat*_*udy 6

如果您正在使用Rails,那么您将找到ActiveSupport的"constantize"来执行您想要的操作.

"String".constantize
=> String
Run Code Online (Sandbox Code Playgroud)

但你可以做类似的事情.

Object.const_get("String")
=> String
Run Code Online (Sandbox Code Playgroud)

你甚至可以在字符串上定义它

class String
  def constantize
    Object.const_get(self)
  end
end
Run Code Online (Sandbox Code Playgroud)

注意:除非你真的需要,否则尽量避免做"eval".