[ruby-list:49945] Re: [質問]コマンドライン引数から使用クラスを確定

From: rubikitch@...
Date: 2014-09-01 04:50:50 UTC
List: ruby-list #49945
From: MASAKI Yuhsuke <reasonset@yahoo.co.jp>
Subject: [ruby-list:49944] [質問]コマンドライン引数から使用クラスを確定
Date: Mon, 1 Sep 2014 13:37:07 +0900

るびきちです。

> document
> translation用で出力フォーマットに応じて交換可能な共通のスーパークラスを持つ複数のクラスがあります。
> これらのクラスはそれぞれが独立したライブラリに収録されています。
> 出力フォーマットの選択をコマンドライン引数または$0名に応じてライブラリをロードし、変数に格納するクラスを選択することで行いたいと思っています。
> しかし、引数に直接クラス名を指定させるような方法をとってもStringからClassオブジェクトを取得する方法が見つからず行き詰まりました。
> かといってHashを使おうとすると、Hash作成時点でClassオブジェクトを必要とするため予め全てのライブラリを読まなくてはいけないことになります。
> evalはなるべくなら使いたくありません。
> Hash的な特異オブジェクトを用意し、#[]の引数に応じてロードとClassオブジェクトのreturnを行うのが一番マシかと思ったのですが、
> その特異オブジェクトを用意するコードがダサいのと、
> 新たなフォーマットに対するトランスレータを追加するたびに起動スクリプトに手を加えなくてはいけないのはあまりよくないように思われます。
> 
> どなたか良い解決方法をご存知ありませんでしょうか。

Module#const_getはどうでしょうか?

====
Object.const_get "String"      # => String
File.const_get "Stat"          # => File::Stat
====

--
rubikitch http://rubikitch.com/
新刊『Rubyによるクローラー開発技法』 http://tinyurl.com/p5faytl
Emacsネット塾『Emacsの鬼るびきちのココだけの話』 http://tinyurl.com/76bnprd
『Ruby逆引きハンドブック』  http://tinyurl.com/pbfqwn

In This Thread