Доступ к значению массива из блока Ruby Enumerator

Как я могу получить доступ к массиву из блока в Ruby?

Например:

[1,2,3].each{|e| puts THEWHOLEARRAY.inspect }

куда THEWHOLEARRAY должен вернуться [1,2,3],

3 ответа

Решение

То, что вы ищете, это либо tap, уже реализовано:

[1, 2, 3].tap { |ary|
  puts ary.inspect
  ary.each { |e|
    # ...
  }
  'hello' ' ' + 'world' # return value demo
} # returns the original array

Или же ergo метод, который скоро появится:

class Object; def ergo; yield self end end # gotta define it manually as of Ruby 2.0.0
[1, 2, 3].ergo { |ary|
  puts ary.inspect
  ary.each { |e|
    # ...
  }
  'hello' ' ' + 'world' # return value demo
} # returns the block return value

Не совсем понятно, что вы хотите сделать. Ты имеешь в виду что-то подобное?

THEWHOLEARRAY = [1,2,3]
THEWHOLEAREAY.each{ |e|
  puts THEWHOLEARRAY.inspect
}

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

Ты не можешь. Переменная блока содержит только информацию об одном элементе для каждой итерации. Он не имеет информации о всем массиве. Более того, each будет повторять столько раз, сколько элементов в массиве. Вы хотите проверить это много раз? Это не имеет смысла.

Другие вопросы по тегам