51623


たとえば、以下の文字列があったとします。

[code]

    "FooModule::BarClass"
    
[/code]

このような、モジュールをフルに含むクラス名の文字列から、 `FooModule::BarClass` のクラスオブジェクトを取得したいと考えました。

eval すれば一発のような気もしますが、脆弱性やバグの温床になりそうなので、できれば避けたいと思っています。

### 質問

  * ruby の、モジュールを含んだフルのクラス名の文字列から、それが表すクラスオブジェクトを取得したいです。これを実現する、そのまま eval 以外の方法などありますでしょうか。


CC BY-SA 4.0
2018-12-17T04:57:51.250
51284
2018-12-30T12:28:57.670
754
question
ruby
ruby の、モジュールを含んだフルのクラス名文字列から、クラスオブジェクトを取得したい


@metropolis さんの指摘通り、 `Module#const_get` は、そのままでも、今回質問で述べた挙動をする様子です。

> This method will recursively look up constant names if a namespaced  
>  class name is provided. For example:
[code]

>     module Foo; class Bar; end end
>     Object.const_get 'Foo::Bar'
>  
[/code]

>
> – `ri Module#const_get`


CC BY-SA 4.0
2018-12-17T08:16:51.667
51293
2018-12-17T08:16:51.667
754
51284
answer


Rubyであれば`Kernel.const_get`で十分ですが、  
Railsであれば、constantizeを使うのがよいです。  
<https://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-
constantize>


CC BY-SA 4.0
2018-12-30T12:28:57.670
51623
2018-12-30T12:28:57.670
31623
51284
answer