Ruby: Rendemento dentro de numerable

Gustaríame poder ceder dentro dun bloque enumerable, a fin de crear algún código de referencia de boilerplate.

Basicamente gustaríame facer algo isto (simplificado):

def iterator( enumerable, &block )
  iterations = enumerable.size
  counter = 0
  enumerable.each do |item|
    counter +=1
    puts "Iterating #{counter}/#{iterations}..."
    yield
  end
end

A continuación gustaríame poder usar este método para envolver este código de referencia da caldera ao redor dun bloque que iteraría, de xeito que puidese chamar algo así como:

# assuming foo is an enumerable collection of objects
iterator foo do
  item.slow_method
  item.mundane_method
  item.save
end

... e cando se executase este código obtería a seguinte saída de rexistro:

Iterating 1/1234...
Iterating 2/1234...
Iterating 3/1234...

Parece que este tipo de cousas deben ser posibles, pero non fun quen de descubrir a sintaxe, nin como se chama tal cousa (para buscala).

O problema é que necesito envolver a chaveira FÓRA do obxecto enumerable que vai repetir e tamén DENTRO do bloque de iteración. Podo pasar un obxecto enumerable. moi ben,pero non podo chamar métodos aos obxectos iterados dentro do bloque no que paso.

Espero que esta explicación teña sentido, estoume costando describila. Por favor, deixe comentarios se precisa aclaracións sobre algo, intentarei explicalo mellor.

5
задан Andrew 30 July 2011 в 00:01
поделиться