Состав функций без аргументов: неверное количество аргументов (дано 1, ожидается 0)
Т.е.:
[1] pry(main)> @foo = rand
=> 0.46682153267547954
[6] pry(main)> multiply = -> () {@foo*2}
=> #<Proc:0x000000000121ac18@(pry):6 (lambda)>
[7] pry(main)> (multiply>>multiply).call
ArgumentError: wrong number of arguments (given 1, expected 0)
from (pry):6:in `block in __pry__'
Есть ли элегантный способ обойти это?:-)
Прежде чем меня атакуют функциональные пуристы, это не гольф-код, хотя я должен признать, что получаю удовольствие:P - Я пытаюсь увидеть, есть ли хороший способ использовать композицию функций, например, отключить отслеживание событий в интеграционных тестах, когда используя инфраструктуру на основе обратного вызова, чья работа заключается в обходе веб-страницы, это ТОЛЬКО работа, которая манипулирует глобальным состоянием в этом смысле и выполняет такие действия, как
do_client_roundtrip around_client_return: method(:dont_trace_events) >> -> () {
click_on "Continue"
assert_invalid_session_page
}
Руби "Все что-то возвращает" здесь кусается, так как ни один из методов не принимает никаких аргументов, и это расстраивает проверки арности. Добавление аргументов, которые ничего не делают, чтобы удовлетворить мое желание поиграть>>
/ <<
это глупо, поэтому мне интересно, есть ли что-то, что я должен делать по-другому?
1 ответ
Композиция функций определена только для унарных функций, этот термин не имеет смысла даже для нулевых функций. (На самом деле, нулевая функция сама по себе не имеет смысла, это то же самое, что и константа.)
Определение "композиция функции" буквально означает "передачу возвращаемого значения одной функции в качестве аргумента следующей функции". Вы просто не можете выполнять композицию функций с нулевыми функциями.