很可能有人问过这个问题,但我找不到答案。
我有四个变量:
a,b,c,d = [a,b,c,d].map{|myvar| myvar+1 }
我怎样才能使这条线更干(保持紧凑),即在不重复变量名的情况下实现相同的更改?
不要创建单独的变量,从一开始就将值放在 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}
我越来越怀疑简短的答案(对于这个带有整数的特定示例)是“不可能”
由于与我上一个问题的答案中描述的相同原因:
像 String#replace 一样替换 Ruby 中引用的整数值
更新:
如果我们操作的变量是 Array、Hash 或 String,并且它们在执行操作后保持相同的数据类型,则使用 replace 会更干燥、更紧凑并节省内存
[a,b,c,d].each{|v| v.replace(v + [1])} #example for an array