CAN HAZ SOM BLOG?
HOF в Ruby
Некоторое время назад я начал более-менее последовательно осваивать Ruby. Он крут и могуч, особенно синтаксическим сахаром, позволяющим делать DSL-и почти на английском языке, разбавленном точками :). Вот только такой вопрос у меня возник — поддерживаються ли в нём функции высших порядков полноценно? Я под этим понимаю не только возможность вернуть функцию как результат другой функции, ясно что скорее всего это можно сделать просто вернув лямбду. А вот как передать функцию в другую функцию в качестве аргумента? Знакомый рубист посоветовал вот такое, меня это, естественно не устроило, ибо это вырвиглазный неочевидный 3.14здец :) Я пошел на ЛОР, как на рассадник всего что только есть, где мне тоже не особо помогли. Может кто поможет, как сделать аналог питоньего такого:
def func(f, a):
return f(a)
>>> func(lambda w: w + 5, 5)
10
def func2(a):
return a + 2
>>> func(func2, 5)
7
Ну это простейший пример требуемого.
Собственно вопрос у меня возник вот как. В руби, как известно, во многих случаях можно опускать скобки при вызове метода/функции. Поэтому, строка str = gets означает просто вызов метода gets() и запихивание его выхлопа в переменную str. А вот как быть, если я хочу положить в переменную str именно саму функцию? Причем, мне ну нужны синтетические способы, зависящие от имени функции. Я потом хочу сделать str2 = str и сохранить в str2 тоже эту функицю %). Дальше вопрос этот вылился уже в передачу функции в функцию. Меня, откровенно говоря, одинаково интересуют оба вопроса.
Я почти уверен, что это как-то можно сделать красиво.
- 14 Ноя 22:32
