2013-02-14 3 views
1

Очень вероятно, что этот вопрос задан, но я не могу найти ответ.Как обрабатывать несколько переменных таким же образом?

У меня есть четыре переменные:

a,b,c,d = [a,b,c,d].map{|myvar| myvar+1 } 

Как я могу сделать эту линию более DRY (держа его компактным), то есть, достичь тех же изменений без повторения имен переменных?

+0

Более быстрый способ чтобы написать это: a, b, c, d = [1,2,3,4] .map (&: succ) –

+0

, вы, вероятно, захотели прокомментировать сообщение пользователя deterr, я не вижу, как это связано с моим –

ответ

0

у меня есть растущее подозрение, что короткий ответ (для этого конкретного примера с целыми числами) «нет пути»

по той же причине, как описано в ответе в мой предыдущий вопрос:

replacing referenced Integer value in Ruby like String#replace does

UPDA т.е:

если переменные мы работаем на это массив, Hash или String, и они сохраняют один и тот же тип данных после проведенной операции, он суше, более компактный и экономии памяти использовать заменить

[a,b,c,d].each{|v| v.replace(v + [1])} #example for an array 
+0

ответ от другого вопроса не имеет никакого отношения к этому вопросу. – doesterr

+0

Этот вопрос касается переменных. я определенно использую карту! не задавая вопроса, если у меня будет время переписать все на массивы. упомянутый ответ показывает, что замена не может использоваться для целых чисел. поэтому я не могу писать, например, [a, b, c, d] .each {| v | v.replace (у + 1)} –

2

Не создавайте отдельные переменные, ставьте значения в массиве или хэши с самого начала.

data = [] 
data << 1 
data << 2 
data << 3 
data << 4 
data = data.map { |value| value + 1 } 
data.inspect # => [2, 3, 4, 5] 

или

data = {} 
data[:a] = 1 
data[:b] = 2 
data[:c] = 3 
data[:d] = 4 
data.each { |key, value| data[key] = value + 1} 
data.inspect # => {:a=>2, :b=>3, :c=>4, :d=>5} 
+2

Или используйте ['map!'] (http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-map-21), чтобы избежать переназначения. – maerics

+0

правый! хотел оставить его как можно более похожим на код из вопроса – doesterr

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