2010-09-30 67 views
38

我最近有兩次電話採訪。訪談:什麼是Lambda表達式?

在兩次採訪中,我被問到是否定義Lambda表達式的最後一個問題。

我聲稱Lambda表達式是代替委託的未命名方法。 但不知何故,這還不夠。

我很難在電話採訪中精確地解釋這一點。

有誰知道更好?

+2

http://stackoverflow.com/questions/471502/what-is-linq/471592#471592上面的「讓我們開始這一探索」的一部分。 – 2010-09-30 15:53:18

+1

所有的LINQ方法都被命名。有些人將未命名的方法作爲參數,即匿名方法或lambda表達式 – Greg 2010-09-30 15:59:22

+0

我無法相信回答這個明顯重複的人數。 – 2010-09-30 19:02:20

回答

33

Lambda表達式是作爲常量值給出的無名函數。它們可以出現在任何其他常量的任何地方,但通常作爲其他函數的參數寫入。典型的例子是,你將一個比較函數傳遞給一個通用的「排序」例程,而不是去定義整個函數(並引發詞法不連續性和名稱空間污染)來描述這種比較的麻煩,你可以傳遞描述比較的lambda表達式。

然而,這忽略了Lambda表達式的一個最重要的特性,那就是它們在外觀上下文中執行。因此,他們可以使用在該上下文中定義的變量的值。這將函數指針與真正的lambda表達式區分開來。在支持可變變量的語言中,正確的lambda表達式提供了改變這些變量值的能力。

Lambda表達式在所有LISP,Perl,Python和最新版本的C++,Objective C,C#和Java 8中都出現(使用不同的語法),但特別是在C中,儘管它有辦法處理傳遞函數(或其中的一些藉口)作爲參數。它們是一種具有特定語義的語法元素,而這些語義對運行時的要求比C要求的要求更高。

+3

從JDK-1.8開始,我相信Lambda表達式在Java中是可用的,除了Java的「Fat Arrow」很薄之外,它們看起來與C#中的Lambda表達式非常相似,反對=> – series0ne 2014-01-02 17:09:49

1

也許他們只是想聽到LINQ是「語言集成查詢」。這就是說,如果他們真的想要解釋「LINQ是什麼」組成的,那麼我可能會包含更多您提供的信息。喜歡的東西:

LINQ或語言集成查詢,是一個集語言添加和框架類添加在.net 3.5,其使得功能更強大的方法來查詢操作。它基於IEnumerable和IQueryable的擴展方法以及它們的通用對應方法,它們允許在LINQ to Objects中延遲執行並通過IQueryable進行遠程處理,以及許多其他功能。對C#和VB.NET也進行了語言更改,以便直接在語言中支持更「自然」的查詢語法。

0

他們可能在尋找您知道LINQ是用於查詢IQueryableIEnumerable對象的新DSL。本質上,「從... where ... select ...」語法。知道它在lambdas和函數式風格下實現可能會讓你獲得獎勵積分。

1

那麼我說Linq是一個未命名的方法來代替代表。

實際上,這根本不是LINQ,而是「lambda表達式」。從技術上講,LINQ甚至不使用它們。

LINQ代表「Language Integrated Query」。具體來說,它是「from ... where .. select」關鍵字(即查詢語法即集成納入語言)。

現在,爲了讓這些關鍵字來做事情,在語言(和CLR)中增加了更多(如lambda表達式,擴展方法,Enumerable類等)。

+0

我剛剛意識到我毀了這個問題。你是對的。這個問題一直是Lambda的表達。在寫這篇文章的時候,我有一些LINQ的想法。 :( – Houman 2010-10-01 09:11:29

1

要回答您的修改問題,爲此,您的答案確實很好。我所做的唯一改變是強調「內聯」一詞。

Lambda表達式是一種未命名的方法,它被內聯寫入需要委託的地方。

13

lambda表達式是代碼的無名暫停。

考慮這個匿名的「乘以兩件事」功能(又名。lambda表達式),使用一些非特定的符號。

λ(x, y) -> x * y 

你的答案是非常具體的,你已經使用Lambda表達式(我猜C#?)的地方,我懷疑面試官問了一個更普遍的認識。代表的概念,C#語言以及方法的概念都與lambda的含義以及它們的工作方式有關。例如,您可以使用lambda表達式on paper進行計算,而不涉及任何方法。

+2

我想遠離「代碼」這個特定的概念:lambda抽象是關於計算的,而不是任何特定的語言,在這種語言中可能會描述這樣的計算。只是有些編程語言包含語法來代表它們或多或少直接就像大多數流行的表達式直接表示代數表達式一樣。 – Ian 2014-01-28 21:33:18