2013-10-07 4 views
0

im пытается оптимизировать мой код как можно больше, и я дошел до тупика.Организуйте мой массив ruby ​​

мой код выглядит следующим образом:

class Person 
    attr_accessor :age 
    def initialize(age) 
    @age = age 
    end 
end 

people = [Person.new(10), Person.new(20), Person.new(30)] 

newperson1 = [Person.new(10)] 
newperson2 = [Person.new(20)] 
newperson3 = [Person.new(30)] 

Есть ли способ, где я могу получить рубин автоматически извлекать данные из массива людей и назвать их следующим newperson1 и так далее ..

С наилучшими пожеланиями

+0

Зачем вам это нужно? Просто используйте их из массива. Или создайте хэш с ключами «newperson» + индекс. –

+0

Im совершенно новый для рубинов и, как я сказал, пытается оптимизировать мой код. вы можете сделать пример использования хэша для этого примера. – Frederik

+0

Если у вас есть коллекция вещей, оптимальный способ использовать его как коллекцию, а не вытягивать отдельные переменные. Это вряд ли будет оптимизацией. Если вы хотите, чтобы иметь идентификатор для каждого элемента, хеш может быть хорошим подходом. Для того, чтобы сделать это, посмотрите на пример пилы, но вместо установки локальной переменной с использованием привязки сначала создайте хэш 'myhash = {}', а затем просто сделайте 'myhash [" newperson # {1} "] = person'. –

ответ

0

Это, безусловно, запах кода. Вы должны называть их [people[0]], [people[1]], ....

Но если вы настаиваете на этом, и если вы можете подождать до 25 декабря (Ruby 2.1), то вы можете сделать:

people.each.with_index(1) do |person, i| 
    binding.local_variable_set("newperson#{i}", [person]) 
end 
+0

человек [0] и что. именно то, что мне нужно, спасибо. – Frederik

-1

Я думаю, что это то, что вы пытаетесь сделать .. .

newperson1 = people[0] 
puts newperson1.age 

выходной сигнал этого 10, как ожидалось.

Смежные вопросы