Лямбда-выражения обычно используются для инкапсуляции алгоритмов, чтобы они могли быть переданы другой функции. Тем не менее, можно выполнить лямбда сразу после определения:
[&](){ ...your code... }(); // immediately executed lambda expression
функционально эквивалентен
{ ...your code... } // simple code block
. Это делает лямбда-выражения мощным инструментом для реорганизации сложных функций. Вы начинаете с упаковки раздела кода в лямбда-функции, как показано выше. Затем процесс явной параметризации можно выполнить постепенно с промежуточным тестированием после каждого шага. После полной настройки кодового блока (как показано в результате удаления &
), вы можете переместить код во внешнее местоположение и сделать его нормальной функцией.
Аналогичным образом вы можете использовать лямбда-выражения для инициализации переменных на основе результата алгоритма ...
int a = []( int b ){ int r=1; while (b>0) r*=b--; return r; }(5); // 5!
Как способ разбиения вашей логики на программу, вы можете даже счесть полезным передать лямбда-выражение в качестве аргумента другому lambda expression ...
[&]( std::function algorithm ) // wrapper section
{
...your wrapper code...
algorithm();
...your wrapper code...
}
([&]() // algorithm section
{
...your algorithm code...
});
Лямбда-выражения также позволяют создавать именованные вложенные функции , что может быть удобным способом избежать дублирования логики. Использование именованных lambdas также имеет тенденцию быть немного легче на глазах (по сравнению с анонимными встроенными лямбдами) при передаче нетривиальной функции в качестве параметра другой функции. Примечание: не забывайте точку с запятой после закрывающей фигурной скобки.
auto algorithm = [&]( double x, double m, double b ) -> double
{
return m*x+b;
};
int a=algorithm(1,2,3), b=algorithm(4,5,6);
Если последующее профилирование показывает значительные служебные издержки инициализации для объекта функции, вы можете переписать это как нормальная функция.
Fetch не использует cookie по умолчанию. Чтобы включить cookie, сделайте следующее:
fetch(url, {
credentials: "same-origin"
}).then(...).catch(...);
Только что решили. Всего два f. дней брутфорса
Для меня секрет заключался в следующем:
credentials: 'include'
и получив 401 unauth, из-за отсутствия файлов cookie с запросом. KEY должен установить credentials: 'include'
для первого / api / auth call.
В дополнение к ответу @ Khanetor для тех, кто работает с запросами на перекрестный поиск: credentials: 'include'
Пример запроса выборки JSON:
fetch(url, {
method: 'GET',
credentials: 'include'
})
.then((response) => response.json())
.then((json) => {
console.log('Gotcha');
}).catch((err) => {
console.log(err);
});
https : //developer.mozilla.org/en-US/docs/Web/API/Request/credentials
same-origin
(который делает i> все еще работает) означает, что больше заголовков будет соблюдаться (файлы cookie и т. Д.), Но ваш код будет иметь ограниченный доступ к ответу. – Coderer 13 December 2017 в 16:51document.cookie
, но все еще доступно для запросов ajax или fetch. – Martin Bajcar 28 May 2018 в 22:01