Цитата |
---|
PooHkrd написал: А вот объявление функции по ходу дела и особенно с двумя-тремя аргументами мне почему-то взрывает мозг. |
Ничего, это пройдет.
"По ходу дела" функция обявляется обычно там, где она требуется как аргумент. Например, в List.Transform второй аргумент - функция, применяемая к элементу списка. Ей передается один аргумент, а вот как его назвать - _ или item или vasyadurak - дело пишущего
Ну и
each равнозначен
(_)=>Вот четыре идентичные, по сути, записи:
Код |
---|
List.Transfrom(strings, Text.Proper)
List.Transfrom(strings, each Text.Proper(_))
List.Transfrom(strings, (_)=>Text.Proper(_))
List.Transform(strings, (item)=>Text.Proper(item)) |
Понятно, что если функцию стоит записать в несколько строк, то как 2, так 3 или 4 вариант дают нам такую возможность. Но если возникает вложенность разных итераторов, то мне проще переписать их руками, например, строку на входе я обозначу как
row, элемент списка - как
el или
item, далее это поможет вспомнить, что именно я тут мучаю. Ну и сослаться при необходимости на аргумент более верхнего уровня тоже можно, удобно.
Сергей написал отличный код, но там ничего такого супер-необычного с точки зрения синтаксиса не использует. Там просто List.Accumulate третьим аргументом требует функцию, принимающую два аргумента, первый из которых текущее состояние аккумулятора, а второй - текущий элемент перебираемого списка. Он их обозвал как (sum,x), хотя мог так, как в документации приведено: (state, current). Ну, ему так удобнее было. Я так ленивый и вообще пишу в этом случае (s, c), хотя для читабельности это хуже.