Articles of lambda

Por que o lambda do C ++ 11 requer uma palavra-chave “mutável” para captura por valor, por padrão?

Exemplo Curto: #include int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "\n"; // "10" } A pergunta: Por que precisamos da palavra-chave mutable ? É bem […]

Como dizer uma function lambda para capturar uma cópia em vez de uma referência em c #?

Eu tenho aprendido C # e estou tentando entender lambdas. Neste exemplo abaixo, imprime 10 dez vezes. class Program { delegate void Action(); static void Main(string[] args) { List actions = new List(); for (int i = 0; i Console.WriteLine(i)); foreach (Action a in actions) a(); } } Obviamente, a class gerada por trás do […]

Definição precisa de “interface funcional” no Java 8

Recentemente comecei a explorar o Java 8 e não consigo entender bem o conceito de “interface funcional” que é essencial para a implementação de expressões lambda do Java. Existe um guia bastante abrangente para funções lambda em Java, mas fiquei preso no capítulo que dá definição ao conceito de interfaces funcionais . A definição diz: […]

Existe uma maneira de comparar lambdas?

Digamos que eu tenha uma lista de objects que foram definidos usando expressões lambda (closures). Existe uma maneira de inspecioná-los para que possam ser comparados? O código em que estou mais interessado é List strategies = getStrategies(); Strategy a = (Strategy) this::a; if (strategies.contains(a)) { // … O código completo é import java.util.Arrays; import java.util.List; […]

Como converter uma String para sua tree de expressões LINQ equivalente?

Esta é uma versão simplificada do problema original. Eu tenho uma class chamada Person: public class Person { public string Name { get; set; } public int Age { get; set; } public int Weight { get; set; } public DateTime FavouriteDay { get; set; } } … e digamos uma instância: var bob = […]

O que é o uso da interface funcional no Java 8?

Eu me deparei com um novo termo chamado Interface Funcional no Java 8. Eu só consegui encontrar um uso dessa interface ao trabalhar com expressões lambda . O Java 8 fornece algumas interfaces funcionais internas e, se quisermos definir qualquer interface funcional, podemos usar a anotação @FunctionalInterface . Isso nos permitirá declarar apenas um único […]

Como executar Join entre várias tabelas no LINQ lambda

Eu estou tentando executar uma associação entre várias tabelas no LINQ. Eu tenho as seguintes classs: Product {Id, ProdName, ProdQty} Category {Id, CatName} ProductCategory{ProdId, CatId} //association table E eu uso o seguinte código (onde product , category e productcategory são instâncias das classs acima): var query = product.Join(productcategory, p => p.Id, pc => pc.ProdID, (p, […]

Lambda C ++ com capturas como um ponteiro de function

Eu estava jogando com C ++ lambdas e sua conversão implícita para pointers de function. Meu exemplo inicial foi usá-los como retorno de chamada para a function ftw. Isso funciona como esperado. #include #include using namespace std; int main() { auto callback = [](const char *fpath, const struct stat *sb, int typeflag) -> int { […]

Maneira mais eficiente de testar a igualdade de expressões lambda

Dada uma assinatura de método: public bool AreTheSame(Expression<Func> exp1, Expression<Func> exp2) Qual seria a maneira mais eficiente de dizer se as duas expressões são as mesmas? Isso só precisa funcionar para expressões simples, com isso quero dizer que tudo o que seria “suportado” seria Simple MemberExpressions, por exemplo, c => c.ID. Um exemplo de chamada […]

Incorreto TypeError: invocação ilegal em javascript

Estou criando uma function lambda que executa uma segunda function com um params concreto. Este código funciona no Firefox, mas não no Chrome, seu inspetor mostra um erro estranho, Uncaught TypeError: Illegal invocation . O que há de errado no meu código? var make = function(callback,params){ callback(params); } make(console.log,’it will be accepted!’);