Tag: lambda

确定lambda中的参数个数

我想知道是否有一种方法来确定(给定一个包含lambda的variables)它包含的lambda参数的数量。 原因是,我想调用一个函数有条件地依赖于参数的数量。 我在找什么 def magic_lambda_parameter_counting_function(lambda_function): """Returns the number of parameters in lambda_function Args: lambda_function – A lambda of unknown number of parameters """ 所以我可以做类似的事情 def my_method(lambda_function): # … # (say I have variables i and element) parameter_count = magic_lambda_parameter_counting_function(lambda_function) if parameter_count == 1: lambda_function(i) elif parameter_count == 2: lambda_function(i, element)

在lambda函数中使用auto

#include <vector> #include <algorithm> void foo( int ) { } int main() { std::vector< int > v( { 1,2,3 } ); std::for_each( v.begin(), v.end(), []( auto it ) { foo( it+5 ); } ); } 编译时,上面的例子会像这样启动错误输出: h4.cpp: In function 'int main()': h4.cpp:13:47: error: parameter declared 'auto' h4.cpp: In lambda function: h4.cpp:13:59: error: 'it' was not […]

使用GCC语句expression式的匿名函数

这个问题并不十分具体, 这真的是为了我自己的C丰富,我希望别人也可以发现它有用。 免责声明:我知道很多人都会有这样的冲动:“如果你想做FP,那么就用一种function性语言”。 我在embedded式环境中工作,需要链接到许多其他C库,并没有太多的空间可用于更多的大型共享库,并且不支持许多语言运行时。 而且,dynamic内存分配是不可能的。 我也很好奇。 我们中的许多人都看过这个漂亮的Cmacros,用于lambdaexpression式: #define lambda(return_type, function_body) \ ({ \ return_type __fn__ function_body \ __fn__; \ }) 一个例子是: int (*max)(int, int) = lambda (int, (int x, int y) { return x > y ? x : y; }); max(4, 5); // Example 使用gcc -std=c89 -E test.c ,lambda扩展为: int (*max)(int, int) = ({ […]

为什么Java 8types推断不考虑Lambdas在重载select中抛出的exception?

我有一个关于lambda的Java 8推理及其相关的exception签名的问题。 如果我定义了一些方法foo: public static <T> void foo(Supplier<T> supplier) { //some logic … } 那么我可以写出foo(() -> getTheT());简洁明了的语义foo(() -> getTheT()); 在大多数情况下对于给定的T 然而,在这个例子中,如果我的getTheT操作声明它throws Exception ,那么我的foo方法就不再编译供应商了:供应商get方法签名不会抛出exception。 看起来像一个体面的方式来解决这个问题将是重载foo接受任一选项,重载的定义是: public static <T> void foo(ThrowingSupplier<T> supplier) { //same logic as other one … } ThrowingSupplier被定义为 public interface ThrowingSupplier<T> { public T get() throws Exception; } 这样,我们有一个供应商types抛出exception,一个不是。 所需的语法是这样的: foo(() -> operationWhichDoesntThrow()); //Doesn't […]

lambda函数对象中的静态variables如何工作?

在使用lambda的函数的调用中保留的lambda中使用了静态variables? 或者是函数对象“创build”每个函数调用? 无用的例子: #include <iostream> #include <vector> #include <algorithm> using std::cout; void some_function() { std::vector<int> v = {0,1,2,3,4,5}; std::for_each( v.begin(), v.end(), [](const int &i) { static int calls_to_cout = 0; cout << "cout has been called " << calls_to_cout << " times.\n" << "\tCurrent int: " << i << "\n"; ++calls_to_cout; } ); } int […]

如何将expression式树转换为部分SQL查询?

当EF或LINQ to SQL运行查询时,它: 从代码构buildexpression式树, 将expression式树转换为SQL查询, 执行查询,从数据库获取原始结果并将其转换为应用程序使用的结果。 看着堆栈跟踪,我不知道第二部分发生在哪里。 一般来说,是否可以使用EF或(最好是)LINQ to SQL的一个现有部分将Expression对象转换为部分SQL查询(使用Transact-SQL语法),或者我必须重新发明轮子? 更新:评论要求提供我想要做的一个例子。 其实, 下面Ryan Wright的回答完全说明了我想要达到的结果,除了我的问题是关于如何使用EF和LINQ to SQL实际使用的.NET Framework的现有机制来实现的 ,而不必重新发明轮子,并自己写成千行的未经过testing的代码来做类似的事情。 这也是一个例子。 再一次请注意,没有ORM生成的代码。 private class Product { [DatabaseMapping("ProductId")] public int Id { get; set; } [DatabaseMapping("Price")] public int PriceInCents { get; set; } } private string Convert(Expression expression) { // Some magic calls to .NET Framework code happen […]

在Java中的lambda引用

我想将anonymous class转换为lambda expression 。 但是这个匿名类我使用this关键字。 例如,我写了这个简单的Observer/Observable模式: import java.util.ArrayList; import java.util.Collection; public static class Observable { private final Collection<Observer> notifiables = new ArrayList<>(); public Observable() { } public void addObserver(Observer notifiable) { notifiables.add(notifiable); } public void removeObserver(Observer notifiable) { notifiables.add(notifiable); } public void change() { notifiables.forEach(notifiable -> notifiable.changed(this)); } } public interface Observer { void changed(Observable […]

指定std :: function的默认值

void func(const std::function<void()>& f = empty) { if(f) f(); } 什么是'空'应该是? 我使用[](){} 。 但从技术上讲,这不是空的,f()将执行。

使用Linq to SQL确定行是否存在的最快方法是什么?

我对一行的内容不感兴趣,我只想知道是否存在一行。 Name列是主键,因此将有0或1匹配的行。 目前,我正在使用: if ((from u in dc.Users where u.Name == name select u).Count() > 0) // row exists else // row doesn't exist 虽然上面的工作,它通过select行的所有内容(如果存在)做了很多不必要的工作。 以下是否创build了一个更快的查询: if (dc.Users.Where(u => u.Name == name).Any()) …还是有更快的查询?

sorting列表<date时间>降序

在c#(3.0或3.5,所以我们可以使用lambdaexpression式),是否有一个优雅的方式按照降序排列date列表? 我知道我可以做一个直接sorting,然后扭转整个事情, docs.Sort((x, y) => x.StoredDate.CompareTo(y.StoredDate)); docs.Reverse(); 但有一个lambdaexpression式来做到这一步? 在上面的例子中,StoredDate是一个types为DateTime的属性。