Что такое блок в Руби? Это кусок кода, огранченный скобками {} или do end. Блок ассоциируется с методом и является чем-то, что похоже на колбек. Обращение к этому коду происходит через вызов yield:
При вызове метода blockCall будет дважды выведено "I'm block".
В блок можно передавать параметры:
При выполнении этого метода, будет выведено
"I'm block 1"
"I'm block 2"
Какая же ценность этих блоков? Механиз блоков применяется для итераторов. Итератор в Руби - это всего лишь функция, которая ассоциируется с некоторым блоком и внутри которой есть yield. Не нужны дополнительные классы как в С++. Например, итератор Array#each просто перебирает все элементы массива. Для того, что бы вывести списов элементов, можно просто написать:
Как пример можно рассмотреть так же метод Array#find:
Теперь, если мы хотим найти элемента массива, квадрат которого больше 30:
Еще одно удобное применение блоков - выполнение транзакций. Код транзакиции помещается в блок, конект к источнику данных и дисконект выполняется в функции:
Пользователя этого класса не заботит открытие и закрытие файла, его интересует только сама чтение файла (запись или другое действие с файлом).
Есть еще один способ использовать блок с методом - если последний параметр метода содержит префикс &, то ассоциированный блок конвертируется в объект Proc и передается как параметр метода:
пятница, 14 сентября 2007 г.
Ruby's blocks and iterators
Автор: sash_ko на 17:14
Ярлыки: Программизм, Ruby
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий