Ruby类到符号

Ruby类到符号,ruby,Ruby,我想得到一个对象的类,并把它变成一个符号。特别是,鉴于此: class Apple end class Apple_Pie def name "apple pies" end end fruit_table = {:Apple => :Apple_Pie} a = Apple.new 我想从a开始获取类Apple\u-Pie的实例。我试过: obj = Object.const_get(fruit_table[a.class]) obj.name 期待 apple

我想得到一个对象的类,并把它变成一个符号。特别是,鉴于此:

class Apple
end

class Apple_Pie
  def name
    "apple pies"
  end
end

fruit_table = {:Apple => :Apple_Pie}

a = Apple.new
我想从
a
开始获取类
Apple\u-Pie
的实例。我试过:

obj = Object.const_get(fruit_table[a.class])
obj.name
期待

apple pies

但这实际上并没有发生。我不知道如何把班级变成一个象征。有什么想法吗?

您需要使用
Module#name
获取类的字符串名称,然后使用
string#to_sym
将其转换为符号

从我的控制台:

> a.class
=> Apple
> a.class.name
=> "Apple"
> a.class.name.to_sym
=> :Apple

您需要使用
Module#name
获取类的字符串名称,然后使用
string#to_sym
将其强制转换为符号

从我的控制台:

> a.class
=> Apple
> a.class.name
=> "Apple"
> a.class.name.to_sym
=> :Apple

我刚刚粘贴了您的代码,并将.new添加到`obj=obj=Object.const_get(fruit_table[a.class.name.to_sym]).new.name 成功了。 不确定这是否是你想要的


更新:忘记添加.name.to_-sym我刚刚粘贴了您的代码,并将.new添加到`obj=obj=Object.const_-get(水果表[a.class.name.to_-sym]).new中
    ob_demoobject=Hash.new
    sym=ob_demoobject.class.to_s.to_sym
成功了。 不确定这是否是你想要的


更新:忘记将.name.添加到\u sym

啊,类的名称。谢谢啊,这个班的名字。谢谢有趣的是,它起作用了。我遇到的问题是,类实际上不是散列中的键,因此尝试对类本身进行散列将返回nil。除了问题中提到的点之外,这是OPs的错误。更新的答案:我使用class.name.to_sym从散列中获取类名。有趣的是,它起了作用。我遇到的问题是,该类实际上不是散列中的键,因此尝试对该类本身进行散列将返回nil。除了问题中提到的点之外,这是OPs的错误。更新的答案:我使用class.name.to_sym从散列中获取类名
    ob_demoobject=Hash.new
    sym=ob_demoobject.class.to_s.to_sym