migmit ([info]migmit) wrote,
@ 2008-12-16 20:27:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
On Vox: Записки маньяка

Бэкграунд. Те, кто знает 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




(Read 10 comments) - (Post a new comment)


[info]brokolo_vakento
2009-06-28 03:00 pm UTC (link)
Хам

(Reply to this) (Parent)(Thread)


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

(Reply to this) (Parent)


(Read 10 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…