Почему исходный код Ramda имеет более одной функции карри, так что Redux создает? - PullRequest
3 голосов
/ 21 января 2020

В есть _curry1 _curry2 _curry3 _curryN функция * Исходный код Ramda

этот паттерн появляется и в избыточной композитной функции

Мне интересно, почему они используют этот шаблон вместо использования универсальной c функции для всех ситуаций?

Улучшает ли этот шаблон производительность?

Ответы [ 2 ]

0 голосов
/ 21 января 2020

В дополнение к правильному ответу Куши я хотел бы добавить, что _ -фиксированные функции - это внутренние данные Рамды , нигде не выставленные.

Рамда (отказ от ответственности: я один из его основателей и первичных авторов) выставляет curryN и полезный глянец на нем, curry. Другие используются только для внутреннего использования. Они несут некоторые дополнительные трудности, особенно для помощи с заполнителями. Но главное, что это не полноценные функции Рамда-карри, а только внутренние помощники, которые не готовы к разоблачению. Мы могли бы исправить их так, чтобы они были, как и было в этом цитируемом комментарии, но мы никогда не беспокоились. Было бы некоторое повышение производительности, возможно, именно поэтому Redux и делает это, но мы не считаем, что карри является огромным ударом по производительности, по крайней мере, с тех пор, как мы написали эти помощники.

В более строгой библиотеке, такой как Sanctuary, они - единственный вид API, который был бы разрешен, так как входные данные не могут быть переменными c. Рамда, тем не менее, делает все возможное, чтобы поддерживать функции variadi c. Рамда решил не go идти по этому маршруту.

0 голосов
/ 21 января 2020

Это отличный вопрос, поглядывая вокруг, я нашел эту проблему . Цитируя комментарий CrossEye

Мы могли бы рассмотреть возможность выставления curry2 и curry3 напрямую. Самая большая проблема будет в документации. Как бы нам было удобно объяснить компромиссы между curry, который менее эффективен, но сохраняет контекст и проходит через все предоставленные аргументы, и curry2 / curry3, который может работать быстрее, но который теряет свой вызывающий контекст и игнорирует дополнительные предоставленные аргументы. Но я не вижу особых проблем с фактическим раскрытием этих функций.

Похоже, что _curry1, _curry2, _curry3 не могут быть полностью заменены на _curryN.

...