这个问题极有可能被问到,但我找不到答案。
我有四个变量:
a,b,c,d = [a,b,c,d].map{|myvar| myvar+1 }
如何让这条线更干(保持紧凑),即在不重复变量名的情况下实现相同的变化?
答案 0 :(得分:2)
不要创建单独的变量,从一开始就将值放在Array或Hash中。
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}
答案 1 :(得分:0)
我越来越怀疑简短的回答(对于这个具有整数的具体例子)是“没办法”
由于我在上一个问题的答案中描述的相同原因:
replacing referenced Integer value in Ruby like String#replace does
更新
如果我们操作的变量是Array,Hash或String,并且它们在执行的操作后保持相同的数据类型,它更干燥,更紧凑并且节省内存以使用替换
[a,b,c,d].each{|v| v.replace(v + [1])} #example for an array