migmit: (Default)
[personal profile] migmit

Бэкграунд. Те, кто знает Ruby - пропустите.

В рубях есть такая фишка - собственно, основная - как "блоки". Каждому вызову метода можно дать как бы дополнительный параметр - блок кода. Эти блоки не являются настоящими значениями первого класса; однако, внутри метода их можно вызывать.

Метод:


class SomeClass
    ...
    def someMethod
        ... # что-то тут делаем
        yield # вызываем переданный блок
        ... # делаем что-то ещё
    end
    ...
end

Его вызов:

someInstance = SomeClass.new
...
someInstance.someMethod {... блок кода ...}

Вот, значит. Команда yield вызовет этот самый блок кода.

Замечание: из блока кода можно сделать настоящую лямбда-функцию, так что не говорите, что что-то не так.

Дальше - больше. Переданный блок может иметь параметры - скажем, так:


someInstance.someMethod {|i j| ... if i>j then...}

Соответственно, параметры передаются yield:

yield(1,2);

Ну, и что маньяк в моём лице попытался сделать в первую очередь? Ну разумеется, что-то такое:

...
def someMethod
    yield {бла-бла-бла}
end
...
someInstance.someMethod {yield}

С тем, чтобы метод вызвал переданный ему блок, в свою очередь передав этому блоку другой блок кода.

И что бы вы думали?

Не сработало.

Originally posted on migmit.vox.com

Date: 2008-12-16 07:47 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Ну Мац же тихий интроверт, разговаривает полушепотом, сидит себе паяет версию 1.86; вместо науки у него интуиция. А толпа несчастных бегает вокруг и хавает всю эту чушь, что он производит...

Гвидо хотя бы гениальный программист, сам-то по себе.

Date: 2008-12-16 07:51 pm (UTC)
From: [identity profile] migmit.vox.com (from livejournal.com)
Пока что Ruby мне кажется более продуманным языком, чем зелёненький.

Date: 2009-02-16 09:46 am (UTC)
From: [identity profile] migmit.vox.com (from livejournal.com)
Я неправ. Уёбищный язык.
(deleted comment)

Date: 2009-06-27 02:38 pm (UTC)
From: [identity profile] migmit.vox.com (from livejournal.com)
Ты ещё через год спроси, ага?
(deleted comment)

Date: 2009-06-28 08:06 am (UTC)
From: [identity profile] migmit.vox.com (from livejournal.com)
Для тупых разъясняю: с тех пор прошло четыре месяца, в течение которых я занимался более интересными вещами. Я не помню, блин.
(deleted comment)

Date: 2009-06-28 04:53 pm (UTC)
From: [identity profile] migmit.vox.com (from livejournal.com)
Пошёл на хуй, тупое мурло.