воскресенье, 11 марта 2012 г.

Выражение yield в Ruby

Разница с и без:
# in some other library

def before_stuff
  ...before code...
end
def after_stuff
  ..after code...
end

# in your code

def do_everything
  before_stuff()
  my_custom_stuff()
  after_stuff()
end
# in some other library

def around_stuff
  ...before code...
  yield
  ..after code...
end

# in your code

def do_everything
  around_stuff do
    my_custom_stuff()
  end
end


Итераторы - это один из способов применения yield. На место оператора yield ставится блок кода, которые решает что делать с тем или иным элемемнтом итерации, или вцелом с самим процессом итерации:
class RandomSequence
  def initialize(limit,num)
    @limit,@num = limit,num
  end
  def each
    @num.times { yield (rand * @limit).floor }
  end
end

i = -1
RandomSequence.new(10,4).each do |num|
  i = num if i < num
end

Комментариев нет:

Отправить комментарий