Читать «Учись программировать (на 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]"> дайте мне знать!