Ruby 中的自动递增变量

ste*_*iel 2 ruby variables

如何自动递增一个变量,以便每次使用它时,它都会从 0 开始递增 1?

例如:

i = i+1 || 0 

arr[i] = "foo"
arr[i] = "bar"
arr[i] = "foobar"

arr #=> ["foo","bar","foobar"]
Run Code Online (Sandbox Code Playgroud)

我收到NoMethodError nil:NilClass 的未定义方法“+”

Jör*_*tag 5

变量只是一个名称。它没有行为。如果您想要行为,请使用以下方法:

def i
  @i ||= -1
  @i += 1
end

arr = []

arr[i] = 'foo'
arr[i] = 'bar'
arr[i] = 'foobar'

arr #=> ['foo', 'bar', 'foobar']
Run Code Online (Sandbox Code Playgroud)

或者:

_i = -1

define_method(:i) do
  _i += 1
end

arr = []

arr[i] = 'foo'
arr[i] = 'bar'
arr[i] = 'foobar'

arr #=> ['foo', 'bar', 'foobar']
Run Code Online (Sandbox Code Playgroud)

但实际上,你所拥有的只是一种非常复杂的说法

arr = %w[foo bar foobar]
Run Code Online (Sandbox Code Playgroud)

这更清楚了。