标签: lambda

最终和有效决赛之间的区别

我在Java 8中玩lambdas,我遇到了警告local variables referenced from a lambda expression must be final or effectively final.我知道当我在匿名类中使用变量时,它们必须在外部类中是最终的,但仍然 - 最终有效最终之间有什么区别?

java lambda final inner-classes java-8

329
推荐指数
7
解决办法
16万
查看次数

有没有办法在python的lambda中执行"if"

python 2.6中,我想做:

f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception
Run Code Online (Sandbox Code Playgroud)

这显然不是语法.是否有可能执行ifin lambda和if if how to do it?

谢谢

python lambda python-2.6

328
推荐指数
6
解决办法
44万
查看次数

C#Lambda表达式:我为什么要使用它们?

我已经快速阅读了Microsoft Lambda Expression文档.

这种例子帮助我更好地理解了:

delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
Run Code Online (Sandbox Code Playgroud)

不过,我不明白为什么会有这样的创新.它只是一种在"方法变量"结束时死亡的方法,对吗?为什么我应该使用它而不是真正的方法?

c# lambda c#-3.0

302
推荐指数
10
解决办法
22万
查看次数

Python中没有Multiline Lambda:为什么不呢?

我听说它说多行lambda不能在Python中添加,因为它们会在语法上与Python中的其他语法结构发生冲突.我今天在公共汽车上考虑这个问题,并意识到我想不出多线lambdas碰撞的单个Python构造.鉴于我非常了解这门语言,这让我感到惊讶.

现在,我确定Guido有理由不在语言中包含多行lambdas,但是出于好奇:包含多行lambda的情况会有多么模糊?我听到的是真的,还是有其他原因使Python不允许多行lambda?

python syntax lambda

299
推荐指数
11
解决办法
15万
查看次数

从Java 8流中断或返回每个?

使用外部迭代时,Iterable我们使用breakreturn来自增强型for-each循环:

for (SomeObject obj : someObjects) {
   if (some_condition_met) {
      break; // or return obj
   }
}
Run Code Online (Sandbox Code Playgroud)

我们如何在Java 8 lambda表达式中使用breakreturn使用内部迭代,如:

someObjects.forEach(obj -> {
   //what to do here?
})
Run Code Online (Sandbox Code Playgroud)

java foreach lambda java-8

275
推荐指数
9
解决办法
24万
查看次数

如何从Java 8流中抛出CHECKED异常?

如何从Java 8流/ lambdas中抛出CHECKED异常?

换句话说,我想像这样编译代码:

public List<Class> getClasses() throws ClassNotFoundException {     

    List<Class> classes = 
        Stream.of("java.lang.Object", "java.lang.Integer", "java.lang.String")
              .map(className -> Class.forName(className))
              .collect(Collectors.toList());                  
    return classes;
    }
Run Code Online (Sandbox Code Playgroud)

此代码无法编译,因为Class.forName()上面的方法抛出ClassNotFoundException,检查.

请注意我不希望将已检查的异常包装在运行时异常中,而是抛出包装的未经检查的异常.我想抛出已检查的异常本身,而不是向流添加丑陋的try/ catches.

java lambda checked-exceptions java-8 java-stream

270
推荐指数
10
解决办法
11万
查看次数

使用Lambda/Linq对列表对列表进行排序

我在字符串中有"按属性排序"的名称.我将需要使用Lambda/Linq对对象列表进行排序.

例如:

public class Employee
{
  public string FirstName {set; get;}
  public string LastName {set; get;}
  public DateTime DOB {set; get;}
}


public void Sort(ref List<Employee> list, string sortBy, string sortDirection)
{
  //Example data:
  //sortBy = "FirstName"
  //sortDirection = "ASC" or "DESC"

  if (sortBy == "FirstName")
  {
    list = list.OrderBy(x => x.FirstName).toList();    
  }

}
Run Code Online (Sandbox Code Playgroud)
  1. 而不是使用一堆ifs来检查fieldname(sortBy),是否有更简洁的方法进行排序
  2. 排序是否知道数据类型?

c# linq lambda linq-to-objects

264
推荐指数
9
解决办法
47万
查看次数

"int main(){(([[(){})());}"有效的C++是怎样的?

我最近遇到了以下深奥的代码.

int main(){(([](){})());}
Run Code Online (Sandbox Code Playgroud)

按如下方式重新格式化以使其更具可读性:

int main(){
    (([](){})());   //  Um... what?!?!
}
Run Code Online (Sandbox Code Playgroud)

但我无法理解如何(([](){})())有效的代码.

  • 它看起来不像函数指针语法.
  • 它不能是一些运算符重载技巧.代码按原样编译.

谷歌对这种全符号搜索没有多大帮助.但它在Visual Studio 2010中编译并且不输出任何内容.没有错误,也没有警告.所以它看起来像有效的代码.

我从未见过任何在JavascriptC函数指针之外如此奇怪的有效代码.

有人可以解释这是如何有效的C++?

c++ syntax lambda c++11

264
推荐指数
1
解决办法
1万
查看次数

如何使用linq扩展方法执行左外连接

假设我有一个左外连接:

from f in Foo
join b in Bar on f.Foo_Id equals b.Foo_Id into g
from result in g.DefaultIfEmpty()
select new { Foo = f, Bar = result }
Run Code Online (Sandbox Code Playgroud)

如何使用扩展方法表达相同的任务?例如

Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ???)
    .Select(???)
Run Code Online (Sandbox Code Playgroud)

c# lambda linq-to-sql

255
推荐指数
5
解决办法
17万
查看次数

一个积极的lambda:'+ [] {}' - 这是什么巫术?

在Stack Overflow问题中,在C++ 11中不允许重新定义lambda,为什么?,给出了一个不编译的小程序:

int main() {
    auto test = []{};
    test = []{};
}
Run Code Online (Sandbox Code Playgroud)

问题得到了回答,一切似乎都很好.然后是Johannes Schaub并做了一个有趣的观察:

如果你+在第一个lambda之前放置一个,它会神奇地开始工作.

所以我很好奇:为什么以下工作呢?

int main() {
    auto test = +[]{}; // Note the unary operator + before the lambda
    test = []{};
}
Run Code Online (Sandbox Code Playgroud)

它与GCC 4.7+和Clang 3.2+都很好.代码标准是否符合要求?

c++ lambda operator-overloading language-lawyer c++11

255
推荐指数
1
解决办法
3万
查看次数