2

|| 文字列または記号を使用して新しい変数を作成するにはどうすればよいですか || オブジェクト?既に作成されたアイテム クラスの 5 つのユニークなオブジェクトが必要だとします。

for x in 1..5
    item_x = item.new()   #where x is obviously the number value of the iterator
end

この方法で eval() を使用してみました:

for x in 1..5
    eval( "item_" << x << "= item.new()")
end

実行したい文字列を eval に入れると、コードに入れたかのように実行されることを期待しています。

動的オブジェクトの作成を検索しましたが、この問題を抱えている人は見つかりませんでした。これがありふれたものである場合は申し訳ありません。.const_get と Openstruct を使用している人々への参照を見つけましたが、これらは私が理解できる方法で問題を解決していないようです。

4

2 に答える 2

3

オブジェクトを配列に格納できない理由はありますか? これにより、作成とアクセスの両方が簡単になります。

items = []

5.times do
  items << Item.new()
end

次に、 throughの代わりに、item_1throughitem_5があります。item[0]item[4]

とは言っても、本当に難しいことをする必要がある/したい場合は、インスタンス変数 ( with ) が問題instance_variable_setない場合のオプションです:@

for x in 1..5
  self.instance_variable_set("@item_#{x}", Item.new())
end

配列に固執することをお勧めします。

更新: あなたのコメントから、実際のユースケースには、連続していない目的の変数名が含まれているようです。その場合、配列ではなくハッシュを使用します。

このように考えてください: ローカル変数の名前として使用したい文字列は、ローカル ハッシュのキーとして使用するだけです。あなたが試みていることがうまくいったとしても、それがあなたが試みていることよりも良くないという例は考えられません。

于 2013-06-16T00:10:12.100 に答える