1

很可能有人问过这个问题,但我找不到答案。

我有四个变量:

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

我怎样才能使这条线更干(保持紧凑),即在不重复变量名的情况下实现相同的更改?

4

2 回答 2

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}
于 2013-02-14T22:19:36.253 回答
0

我越来越怀疑简短的答案(对于这个带有整数的特定示例)是“不可能”

由于与我上一个问题的答案中描述的相同原因:

像 String#replace 一样替换 Ruby 中引用的整数值

更新:

如果我们操作的变量是 Array、Hash 或 String,并且它们在执行操作后保持相同的数据类型,则使用 replace 会更干燥、更紧凑并节省内存

[a,b,c,d].each{|v| v.replace(v + [1])} #example for an array
于 2013-02-15T05:23:31.507 回答