Tag: lambda

为什么必须把一个完整的代码块放在lambda体中呢?

如果在lambda函数中有一个单独的语句,我们可以省略为它定义完整的代码块: new Thread(() -> System.out.println()); 为什么不是那种抛出exception的语句呢? 这产生了编译错误,指出'{' expected : new Thread(() -> throw new RuntimeException()); 当然,在一个代码块中封装lambda体是可行的: new Thread(() -> { throw new RuntimeException(); });

有没有可用于任何lambda的无操作(NOP)的方法引用?

这可能听起来像一个奇怪的问题,但是有没有办法引用Java 8中的Lambda的标准no-op(aka null操作,null-pattern方法,no-operation,do-nothing方法)方法。 目前,我有一个方法,采取一个,例如, void foo(Consumer<Object>) ,我想给它一个无操作,我必须声明: foo(new Consumer<Object>() { public void accept(Object o) { // do nothing } } 我希望能够做到这样的事情: foo(Object::null) 代替。 有这样的东西存在吗? 不知道如何使用多参数方法 – 也许这是Java中的lambdaexpression式的一个缺陷。

Java 8是否支持闭包?

我很困惑。 我认为Java8会从石器时代出现,并开始支持lambdas /封闭。 但是当我尝试: public static void main(String[] args) { int number = 5; ObjectCallback callback = () -> { return (number = number + 1); }; Object result = callback.Callback(); System.out.println(result); } 它说这个number should be effectively final 。 那是呃,不是我想的封闭。 这听起来像是在复制环境的价值,而不是参考。 奖金的问题! Android会支持Java-8的function吗?

在Typescript中声明委托types

来自C#背景,我想创build一个数据types,定义一个函数签名。 在C#中,这是一个如下所示的delegate : delegate void Greeter (string message); public class Foo { public void SayHi (Greeter g) { g("Hi!"); } } 现在,我想在Typescript中达到类似的效果。 我知道Typescript没有委托types,但只有lambdaexpression式。 我想出了这样的事情: class Foo { SayHi (greeter: (msg: String) => void) { greeter('Hi!'); } } 虽然这个工作,我想重复使用方法签名(msg:String) => void的几次,并认为它会更清洁创build一个自定义types – 就像在C#中的委托。 任何想法如何做到这一点?

'await'操作符只能在asynchronouslambdaexpression式中使用

我有ac#的Windowsapp store应用程序。 我试图启动一个MessageDialog时,另一个MessageDialog中的命令button之一被点击。 关键是要警告用户他们的内容是未保存的,如果他们点击取消,则会提示他们使用单独的保存对话框进行保存。 这是我的“showCloseDialog”函数: private async Task showCloseDialog() { if (b_editedSinceSave) { var messageDialog = new MessageDialog("Unsaved work detected. Close anyway?", "Confirmation Message"); messageDialog.Commands.Add(new UICommand("Yes", (command) => { // close document editor.Document.SetText(TextSetOptions.None, ""); })); messageDialog.Commands.Add(new UICommand("No", (command) => { // save document await showSaveDialog(); })); messageDialog.DefaultCommandIndex = 1; await messageDialog.ShowAsync(); } } 在VS我得到一个编译器错误: 'await'操作符只能在asynchronouslambdaexpression式中使用。 […]

Lambda到expression式树的转换

我会保持简单, 如何从lambda中获得expression式树? 或从查询expression式?

C ++ 11和缺乏多态lambdaexpression式 – 为什么?

我一直在审查C ++ 11标准的草案版本。 特别是关于lambda的章节,我对于不引入多态lambdaexpression式的理由感到困惑。 例如,在100001种方法中,可以使用多态lambdaexpression式,我希望我们可以使用如下的代码: template<typename Container> void foo(Container c) { for_each(c.begin(), c.end(), [](T& t) { ++t; }); } 原因是什么: 委员会是否耗尽了时间? 那个多态的lambdas太难实现了? 或者也许他们被视为PTB不需要? 注意:请记住上面的例子不是唯一的,它只是作为代码types的指南。 仅仅专注于为上述代码提供解决方法的答案将不被视为有效! 相关资料: 用于C ++的Lambdaexpression式和闭包 (文档编号N1968 = 06-0038) lambda函数可以模板化吗?

将对象从MemberExpression中取出?

所以,可以说我在C#中有以下expression式: Expression<Func<string>> expr = () => foo.Bar; 我如何提取foo的引用?

如何在C#expression式树中设置字段值?

鉴于: FieldInfo field = <some valid string field on type T>; ParameterExpression targetExp = Expression.Parameter(typeof(T), "target"); ParameterExpression valueExp = Expression.Parameter(typeof(string), "value"); 如何编译一个lambdaexpression式来将“target”参数中的字段设置为“value”?

forEach循环Java 8 for Map条目集

我试图将旧的常规每个循环直到java7到Java8的每个循环的地图条目设置,但我得到一个错误。 这是我想要转换的代码: for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); } 以下是我所做的更改: map.forEach( Map.Entry<String, String> entry -> { System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); }); 我也试着这样做: Map.Entry<String, String> entry; map.forEach(entry -> { System.out.println("Key : " + entry.getKey() + […]