1

オブジェクトのクラスを取得してシンボルに変換したいと考えています。特に、これを考えると:

class Apple
end

class Apple_Pie
  def name
    "apple pies"
  end
end

fruit_table = {:Apple => :Apple_Pie}

a = Apple.new

Apple_Pieから始まるクラスのインスタンスを取得したいと思いますa。私は試した:

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

期待

apple pies

しかし、これは実際には起こりません。クラスをシンボルに変換する方法がわかりません。何か案は?

4

3 に答える 3

5

Module#nameを使用してクラスの文字列名を取得し、を使用してそれをシンボルにキャストする必要がありますString#to_sym

私のコンソールから:

> a.class
=> Apple
> a.class.name
=> "Apple"
> a.class.name.to_sym
=> :Apple
于 2013-02-23T21:36:37.407 に答える
1

あなたのコードを貼り付けて、.newを `obj = obj = Object.const_get(fruit_table[a.class.name.to_sym]).new.name に追加しました。これが実際にあなたが望んでいたものかどうかはわかりません。

更新: .name.to_symを追加するのを忘れていました

于 2013-02-23T21:40:35.657 に答える
0
    ob_demoobject=Hash.new
    sym=ob_demoobject.class.to_s.to_sym
于 2014-04-01T04:07:09.960 に答える