私は、initialize
メソッドがいくつかのインスタンス変数を定義し、いくつかの計算を行うクラスを持っています。そのクラスの約60個のオブジェクトを作成する必要があります。各オブジェクトには、最後にID番号が付いています。例:すべて手で定義することはできますが、それは非常に非効率的です。各オブジェクトを動的に作成する方法はありますか?Rubyでオブジェクトを動的に作成する
答えて
いつでもループを作成して、すべてのオブジェクトを配列にプッシュできます。どのオブジェクトがそれぞれであるかを知るには、配列の位置が必要な場合もあります。これはあなたが望んでいたものではありませんが(少なくとも私はそうは思わない)、十分であるはずです。
class Dynamic
@@instances_of_class = 0
def initialize(x,y)
#...
@array_position = @@instances_of_class
@@instances_of_class += 1
end
end
ary = []
50.times do
ary << Dynamic.new(x,y)
end
編集:このソリューションあなたは、配列を変更した場合、コメントで言ったように、ので、ここで別の解決策だ、バグを引き起こす可能性があります。
File.rbの内部には、使用できる一意の名前付き変数が50個あります。
変数から60個のオブジェクトにアクセスできるようにするには、それらを1つの変数で参照される配列に配置する必要があります。
objects = Array.new(60){Dynamic.new(x, y)}
あなたobject1
、object2
、...、objects[0]
、objects[1]
に対応させていただきます...それぞれ。
これははるかに良い答えです。それでなぜ受け入れられるのではなく、それを下降させたのですか?この答えに何か問題がありますか?私はそれを見ていませんか? – TeWu
私はなぜあなたがこれを必要としているのか分かりません。それは珍しい要求です。それは、問題を解決するのではなく、問題を回避できることを意味します。 TheLuigiのソリューションはうまくいくと思いますが、クラス変数を使用すると、これらのIDは複数のクラスにまたがって共有されます。代わりに、次のようなものでインスタンス変数を使用することができます:
class A
def self.next_id
@id ||= 0 ; @id += 1
end
def initialize
@id = A.next_id
end
end
A.new
# => #<A:0x007fd6d414c640 @id=1>
A.new
# => #<A:0x007fd6d41454a8 @id=2>
- 1. JavaScriptで動的オブジェクトを作成する
- 2. Javascriptで動的オブジェクトを作成する
- 3. JavaScriptを動的に作成するオブジェクト
- 4. C#オブジェクトを動的に作成する
- 5. オブジェクトを自動的に作成する
- 6. 動的にJSONオブジェクトを作成する
- 7. PHPでオブジェクトを動的に作成
- 8. 動的なjavascriptオブジェクトを作成する
- 9. rubyでオブジェクト(クラス)で作成されたオブジェクト(クラス)を作成するには?
- 10. Swift:動的オブジェクトの作成
- 11. 動的オブジェクトの作成
- 12. オブジェクトを動的に作成<Type>
- 13. AngularJSで動的にオブジェクトを作成する方法は?
- 14. StructureMapでオブジェクトのインスタンスを動的に作成する方法は?
- 15. JSでの動的オブジェクトの作成
- 16. PHPでの動的オブジェクトの作成
- 17. JavascriptのようにRubyでオブジェクトとそのメソッドを動的に作成する方法は?
- 18. Rubyは動的に配列を作成します
- 19. 動的リストからJSONオブジェクトを作成
- 20. オブジェクトを動的に作成します。基本に戻る
- 21. オブジェクトを動的に作成してリストに追加するJavaFX
- 22. JSONオブジェクトに基づいてフォームを動的に作成する
- 23. Rubyでクラスを作成してメソッドを動的に追加する
- 24. ボタンをクリックして動的にオブジェクトを作成する方法
- 25. オブジェクトを作成するクラスを動的に選択
- 26. Silverlight DataBindingで子オブジェクトを自動的に作成しますか?
- 27. javascriptでオブジェクトを動的に作成しますか?
- 28. 動的にオブジェクト名を生成する
- 29. Ruby on Rails 3でテーブルとモデルを素早く作成する(動的に)
- 30. Syntatic sugar:シンプルな関数オブジェクトを自動的に作成する
ただ配列にそれらをプッシュすることができます。あなたはそれを試しましたか?同様に:** objs = Array.new **、次に新しいインスタンスごとに** objs.push(Dynamic.new(x、y))**を実行します。 –
これは、各インスタンスを配列内のインデックスに関連付けることになります。これは、変数名にIDを持つことと全く同じです。 –
「各オブジェクトには最後にID番号があります」という意味がはっきりしません。 – sawa