C# 或 Java 有 lambdas 的原因是什么?

2022-09-02 19:21:45

C#或java有lambda的原因是什么?这两种语言都不是基于它们,它似乎是另一种编码方法,可以执行与C#已经执行的相同操作。
我不是在对抗,如果有原因,我想知道原因。为了充分披露,我是一个Java程序员,背景C++,没有lisp经验,我可能只是错过了重点。


答案 1

有些常见的用例需要传递(或存储)一个代码块,以便稍后执行。最常见的是事件侦听器。信不信由你,下面的代码在Java中使用了lambda-ish结构:

JButton button = new JButton("Push me!");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Pressed!");
    }
});

匿名内部类充当 lambda,尽管是一个非常冗长的函数。通过一点点隐式转换的魔力,我们可以在Scala中编写以下等效项:

val button = new JButton("Push me!")
button.addActionListener { e =>
  println("Pressed!")
}

C#使这种事情变得相当容易委托和(甚至更好)lambdas。


答案 2

我认为 C# 中的 lambdas 是执行委托的一个非常方便的捷径。将代码放在使用它的地方,而不是必须在其他地方搜索委托定义,这样可读性要高得多。


推荐