Читать «Учись программировать (на Ruby)» онлайн - страница 46

Крис Пайн

puts 'enlestrationshifter supposine follutify blace' unless 'Chris'.length

= = 5

grobably combergearl kitatently thememberate

И наконец, есть ещё один способ писать методы, которые принимают блоки (а не процедурные объекты). Мы видели это, когда мы захватывали блок и превращали его в процедурный объект, используя трюк с &block в списке параметров при определении функции. Тогда, чтобы вызвать блок, вы просто используете block.call. Ладно, есть способ покороче (хотя лично я нахожу его более запутанным). Вместо этого:

def doItTwice(&block) block.call block.call end

doltTwice do

puts 'murditivent flavitemphan siresent litics' end

murditivent

n a h p m e t i v a l f

siresent

litics

murditivent

flavitemphan

siresent

litics

…вы делаете так:

def doltTwice yield yield end

doltTwice do

puts 'buritiate mustripe lablic acticise' end

buritiate

mustripe

lablic

acticise

buritiate

mustripe

lablic

acticise

Ну, не знаю… а что вы об этом думаете? Возможно, так только я так считаю, но… yield?! Если бы это было что-нибудь наподобие call_the_hidden_block или что-то в этом роде, что бы имело немного больше смысла для меня. Многие люди говорят, что yield для них имеет смысл. Но я думаю, что принцип TMTOWTDI предполагает вот что: они делают что-то по-своему, а я делаю это по-моему.

КОНЕЦ

Используйте всё это во благо, а не во зло. :-) И если вы находите этот учебник полезным (или запутанным, либо если вы нашли ошибку),<a href="mailto:[email protected]"> дайте мне знать!