Показать сообщение отдельно

  #2  
Старый 24.08.2009, 15:25
Flcn
Познающий
Регистрация: 06.07.2009
Сообщений: 54
Провел на форуме:
65872

Репутация: 17
Отправить сообщение для Flcn с помощью ICQ
По умолчанию

ок.
буду первым. недавно начал изучение. вопрос вызвал один код
Код:
class Array
  def inject(n)
     each { |value| n = yield(n, value) }
     n
  end
  def sum
    inject(0) { |n, value| n + value }
  end
  def product
    inject(1) { |n, value| n * value }
  end
end
здесь всё работает, и я отлично понимаю как..
но вот если его изменить на
Код:
class Array
  def inject(n)
     each { |value| yield(n, value) }
     n
  end
  def sum
    inject(0) { |n, value|n =  n + value; return n}
  end
  def product
    inject(1) { |n, value|n =  n * value; return n}
  end
end
то работать он перестаёт. при суммировании он возвращает тока первый элемент. думаю надо копать в сторону локальности переменных. но понять точно не могу. видимо у меня немного не правильное понимание работы блоков. Зарание благодарен