動的なクラス定義 WITH a Class Name
2023-07-30 06:20:55
質問
Rubyのクラスを名前付きで動的に定義するには?
私はクラスを動的に作成する方法を知っています を使わずに のようなものを使って名前を付ける方法を知っています。
dynamic_class = Class.new do
def method1
end
end
しかし、クラス名を指定することはできません。動的にクラスを作成したい で という名前にしたい。
以下は私がやりたいことの例ですが、もちろん実際にはうまくいきません。
(クラスのインスタンスを作成しているのではなく、クラス定義を作成していることに注意してください)
class TestEval
def method1
puts "name: #{self.name}"
end
end
class_name = "TestEval"
dummy = eval("#{class_name}")
puts "dummy: #{dummy}"
dynamic_name = "TestEval2"
class_string = """
class #{dynamic_name}
def method1
end
end
"""
dummy2 = eval(class_string)
puts "dummy2: #{dummy2}" # doesn't work
実際の出力です。
dummy: TestEval
dummy2:
希望する出力
dummy: TestEval
dummy2: TestEval2
======================================================
回答 sepp2kの方法による完全な動的解法です。
dynamic_name = "TestEval2"
Object.const_set(dynamic_name, Class.new) # If inheriting, use Class.new( superclass )
dummy2 = eval("#{dynamic_name}")
puts "dummy2: #{dummy2}"
どのように解決するのですか?
クラスの名前は、それを参照する最初の定数の名前に過ぎません。
すなわち、もし私が
myclass = Class.new
として、次に
MyClass = myclass
とすると、クラス名は
MyClass
. しかし、私は
MyClass =
を実行するまでクラスの名前が分からないのであれば、それはできません。
ですから、代わりに
Module#const_set
を使うことで、動的にconstの値を設定することができます。例
dynamic_name = "ClassName"
Object.const_set(dynamic_name, Class.new { def method1() 42 end })
ClassName.new.method1 #=> 42
関連
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] JSONをC#のダイナミックオブジェクトにデシリアライズする?
-
[解決済み] Rubyのclass << selfイディオム
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] クラスとモジュールの違い
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
-
[解決済み] Rubyの理想的なプロジェクト構造
-
[解決済み] 現在の日時をDD/MM/YYYY HH:MM形式で取得するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在の日時をDD/MM/YYYY HH:MM形式で取得するにはどうすればよいですか?
-
[解決済み] Gemfileでrubygemを指定するときの~>と>=の違いは何ですか?
-
[解決済み] key => "value"`と`key: "value"`のハッシュ表記に違いはありますか?
-
[解決済み] ハッシュの配列をハッシュの値でソートするにはどうしたらいいですか?
-
[解決済み] 文字列を正規表現に変換する ruby
-
[解決済み] Ruby: HTTP でファイルを multipart/form-data で投稿するには?
-
[解決済み] 2つのハッシュを比較するにはどうすればよいですか?
-
[解決済み] Ruby文字列のgsubメソッドとsubメソッドの違いについて
-
[解決済み] Rubyの基本的なプロジェクトはどのように設定するのですか?
-
[解決済み] メソッド名の最後にある「!」や「?」は何のため?