auto GetLambda() {
return []( const int &x ) { return x*x ; } ;
}
struct Lambda {
int operator()(const int &x) { return x * x; }
};
Lambda GetLambda() {
return Lambda();
}
auto GetLambda(int y) {
return [y](const int &x) { return x*y; };
}
struct Lambda {
int y;
Lambda(int y) : y(y) { }
int operator()(const int &x) { return x*y; }
};
Lambda GetLambda(int y) {
return Lambda(y);
}
Вот так делать - это нормально?Вполне
И что в таком случае возвращается, указатель на функцию или сама функция?Функциональный объект. Лямбда — не функция, она может быть приведена к указателю на функцию в некоторых случаях.
Если возвращается указатель, то где хранится сама функция, в куче или стеке?«Функция» лямбды хранится там же, где и остальной код. На лету ничего не собирается и не компилируется. Лямбда это синтаксический сахар для объявления класса с перегруженым оператором вызова функции.
И еще один вопрос, по этой же теме:lambda имеет уникальный тип. Это не функция (но может быть приведена к ней в данном случае).
Это сокращенная запись вот такой конструкции:
Или что то другое?
SELECT t.* FROM tovar
LEFT JOIN svyazka1 as s1 ON (s1.id_from_tovar = t.id)
LEFT JOIN svyazka2 as s2 ON (s2.id_from_tovar = t.id)
/* .. еще join при необходимости.. */
WHERE
s1.category_id = 1 /* ID искомой категории внутри связки */
AND
s2.category_id = 2 /* ID искомой категории внутри связки */
if (arr[0] == arr[1] == arr[2])
почему сравнение значений массива по индексу работает не так, как с обычными переменными
как мне добиться нужного результата?
function getLineFn(x1, y1, x2, y2) {
var k = (y2 - y1) / (x2 - x1);
var b = y1 - k * x1;
return function(x, y) {
var f = x * k + b;
var d = Math.abs(y - f);
return d < 0.00001;
}
}
var x1 = 10
var y1 = 10
var x2 = 500
var y2 = 400
var isOnLine = getLineFn(x1, y1, x2, y2);
var test = isOnLine(100, 200);
console.log(test);