คำถามติดแท็ก lambda

อย่าใช้บริการ AWS (ใช้ [aws-lambda] สำหรับคำถามเหล่านั้น!) Lambdas เป็นฟังก์ชั่นนิรนามหรือการปิดในภาษาโปรแกรมเช่น Lisp, C #, C ++, Lua, Python, Ruby, JavaScript หรือ Java (เช่นเดียวกันกับแลมบ์ดานิพจน์)

9
รายการ <T> คำสั่งซื้อโดยเรียงตามตัวอักษร
ฉันใช้ C # กับ Framework 3.5 List&lt;T&gt;ฉันกำลังมองหาได้อย่างรวดเร็วจัดเรียงทั่วไป เพื่อประโยชน์ของตัวอย่างนี้สมมติว่าฉันมีรายการPersonประเภทที่มีคุณสมบัติของนามสกุล ฉันจะเรียงลำดับรายการนี้โดยใช้การแสดงออกแลมบ์ดาได้อย่างไร List&lt;Person&gt; people = PopulateList(); people.OrderBy(???? =&gt; ?????)
442 c#  generics  list  lambda  sorting 

21
การสะท้อนชื่อพารามิเตอร์: การใช้ C # lambda หรือการใช้ไวยากรณ์ที่ไม่เหมาะสม?
ฉันกำลังดูส่วนประกอบของMvcContrib Grid และฉันก็รู้สึกทึ่ง แต่ในเวลาเดียวกันกลับกลายเป็นว่าเป็นกลอุบายที่ใช้ในไวยากรณ์ไวยากรณ์ : .Attributes(style =&gt; "width:100%") ไวยากรณ์ข้างต้นชุดแอตทริบิวต์รูปแบบของ HTML width:100%สร้างขึ้นเพื่อ ตอนนี้ถ้าคุณให้ความสนใจ 'สไตล์' ไม่ได้ระบุไว้ถูกอนุมานจากชื่อของพารามิเตอร์ในการแสดงออก! ฉันต้องขุดลงไปและพบว่ามี 'เวทมนตร์' เกิดขึ้น: Hash(params Func&lt;object, TValue&gt;[] hash) { foreach (var func in hash) { Add(func.Method.GetParameters()[0].Name, func(null)); } } ดังนั้นรหัสจึงใช้ชื่อทางการของพารามิเตอร์เพื่อสร้างพจนานุกรมของคู่ของค่าชื่อแอตทริบิวต์ โครงสร้างไวยากรณ์ที่ได้นั้นมีความหมายชัดเจนมาก แต่ในเวลาเดียวกันก็อันตรายมาก การใช้แลมบ์ดานิพจน์ทั่วไปช่วยให้สามารถแทนที่ชื่อที่ใช้โดยไม่มีผลข้างเคียง ผมเห็นตัวอย่างในหนังสือที่บอกว่าcollection.ForEach(book =&gt; Fire.Burn(book))ฉันรู้ว่าฉันสามารถเขียนในรหัสของฉันcollection.ForEach(log =&gt; Fire.Burn(log))และมันหมายถึงสิ่งเดียวกัน แต่ด้วยไวยากรณ์ MvcContrib Grid ที่นี่ทั้งหมดในทันทีฉันพบรหัสที่มีลักษณะและการตัดสินใจตามชื่อที่ฉันเลือกสำหรับตัวแปรของฉัน! ดังนั้นนี่คือการปฏิบัติร่วมกันกับชุมชน C # 3.5 / …

9
เมื่อใดที่ฉันควรใช้ฟังก์ชั่นลูกศรใน ECMAScript 6
คำถามนี้ส่งตรงไปยังผู้ที่คิดเกี่ยวกับรูปแบบโค้ดในบริบทของ ECMAScript 6 (Harmony) ที่กำลังจะมาถึงและผู้ที่ได้ทำงานกับภาษานี้แล้ว ด้วย() =&gt; {}และfunction () {}เราจะได้รับสองวิธีที่คล้ายกันมากในการเขียนฟังก์ชั่นใน ES6 ในภาษาอื่น ๆ ฟังก์ชั่นแลมบ์ดามักจะแยกแยะตัวเองโดยการไม่เปิดเผยตัวตน แต่ใน ECMAScript ฟังก์ชั่นใด ๆ สามารถไม่ระบุชื่อได้ แต่ละประเภทมีโดเมนการใช้งานที่ไม่ซ้ำกัน (เช่นเมื่อthisต้องถูกผูกไว้อย่างชัดเจนหรือไม่ผูกมัดอย่างชัดเจน) ระหว่างโดเมนเหล่านั้นมีหลายกรณีที่สัญกรณ์ทั้งสองจะทำ ฟังก์ชั่นลูกศรใน ES6 มีข้อ จำกัด อย่างน้อยสองข้อ: ไม่ทำงานnewและไม่สามารถใช้งานได้เมื่อสร้างprototype แก้ไขthisขอบเขตกับขอบเขตเมื่อเริ่มต้น ข้อ จำกัด ทั้งสองนี้ข้างกันฟังก์ชั่นลูกศรในทางทฤษฎีสามารถแทนที่ฟังก์ชั่นปกติได้เกือบทุกที่ วิธีการที่ถูกต้องใช้พวกเขาในทางปฏิบัติคืออะไร? ควรใช้ฟังก์ชันลูกศรเช่น: "ทุกที่ที่ทำงาน" คือทุกที่ที่ฟังก์ชั่นไม่จำเป็นต้องไม่เชื่อเรื่องพระเจ้าthisและเราไม่ได้สร้างวัตถุ มีเพียง "ทุกที่ที่ต้องการ" เช่นผู้ฟังเหตุการณ์, หมดเวลา, ที่ต้องเชื่อมโยงกับขอบเขตที่แน่นอน ด้วยฟังก์ชั่น 'สั้น' แต่ไม่ได้มีฟังก์ชั่น 'ยาว' เฉพาะกับฟังก์ชั่นที่ไม่มีฟังก์ชั่นลูกศรอื่น สิ่งที่ฉันกำลังมองหาเป็นแนวทางในการเลือกสัญกรณ์ฟังก์ชั่นที่เหมาะสมในรุ่นอนาคตของ ECMAScript คำแนะนำจะต้องมีความชัดเจนเพื่อให้สามารถสอนให้นักพัฒนาในทีมได้และต้องสอดคล้องกันเพื่อที่จะได้ไม่ต้องทำการปรับโครงสร้างไปมาอย่างต่อเนื่องจากสัญกรณ์หนึ่งไปยังอีกฟังก์ชันหนึ่ง

13
มีวิธีการแสดง "ถ้า" ในแลมบ์ดาของงูใหญ่หรือไม่
ใน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 ชัดเจนว่านี่ไม่ใช่ไวยากรณ์ มันเป็นไปได้ที่จะดำเนินการifในlambdaและถ้าเป็นเช่นนั้นจะทำอย่างไร? ขอบคุณ

14
ความแตกต่างระหว่างสุดท้ายและสุดท้ายได้อย่างมีประสิทธิภาพ
ฉันเล่นกับ lambdas ในชวา 8 local variables referenced from a lambda expression must be final or effectively finalและฉันมาข้ามคำเตือน ฉันรู้ว่าเมื่อฉันใช้ตัวแปรภายในคลาสนิรนามพวกเขาจะต้องเป็นคนสุดท้ายในชั้นนอก แต่ยัง - อะไรคือความแตกต่างระหว่างขั้นสุดท้ายและสุดท้ายอย่างมีประสิทธิภาพ ?

14
เมื่อใดควรใช้แลมบ์ดาเมื่อใดควรใช้ Proc.new?
ใน Ruby 1.8 มีความแตกต่างเล็กน้อยระหว่าง proc / lambda ในมือข้างหนึ่งและProc.newอีกด้านหนึ่ง ความแตกต่างเหล่านั้นคืออะไร? คุณสามารถให้แนวทางเกี่ยวกับวิธีการตัดสินใจเลือกได้หรือไม่? ใน Ruby 1.9 proc และ lambda นั้นแตกต่างกัน ตกลงคืออะไร?
336 ruby  lambda  proc 

15
ไม่มี Multiline Lambda ใน Python: ทำไมล่ะ
ฉันเคยได้ยินว่ามีการกล่าวว่าไม่สามารถเพิ่มแลมบ์ดาหลายเส้นใน Python ได้เพราะพวกเขาจะขัดแย้งกับไวยากรณ์อื่นที่สร้างขึ้นใน Python ฉันกำลังคิดเกี่ยวกับสิ่งนี้บนรถบัสในวันนี้และตระหนักว่าฉันไม่สามารถนึกถึงงูหลามตัวเดียวที่สร้างลูกแกะหลายตัว เนื่องจากฉันรู้ว่าภาษาค่อนข้างดีสิ่งนี้ทำให้ฉันประหลาดใจ ตอนนี้ฉันแน่ใจว่ากุยโดมีเหตุผลที่จะไม่รวม lambdas หลายภาษาในภาษา แต่ด้วยความอยากรู้: สถานการณ์ที่การรวมแลมบ์ดาหลายสายจะคลุมเครือ? เป็นสิ่งที่ฉันเคยได้ยินจริงหรือมีเหตุผลอื่นที่งูใหญ่ไม่อนุญาตให้แกะหลายตัว?
335 python  syntax  lambda 

13
ทำลายหรือกลับจากสตรีม Java 8 forEach หรือไม่
เมื่อใช้การวนซ้ำภายนอกมากกว่าการที่Iterableเราใช้breakหรือreturnจากการปรับปรุงสำหรับแต่ละลูปเป็น: for (SomeObject obj : someObjects) { if (some_condition_met) { break; // or return obj } } เราสามารถbreakหรือreturnใช้การวนซ้ำภายในในนิพจน์แลมบ์ดาของ Java 8 เช่น: someObjects.forEach(obj -&gt; { //what to do here? })
312 java  foreach  lambda  java-8 

15
นิพจน์ C # แลมบ์ดา: ทำไมฉันจึงควรใช้
ฉันอ่านเอกสารMicrosoft Lambda Expressionอย่างรวดเร็ว ตัวอย่างประเภทนี้ช่วยให้ฉันเข้าใจได้ดีขึ้นถึง: delegate int del(int i); del myDelegate = x =&gt; x * x; int j = myDelegate(5); //j = 25 ถึงกระนั้นฉันก็ยังไม่เข้าใจว่าทำไมมันถึงเป็นนวัตกรรม มันเป็นแค่วิธีการหนึ่งที่ตายเมื่อ "ตัวแปร method" จบลงใช่ไหม เหตุใดฉันจึงควรใช้วิธีนี้แทนวิธีการจริง
309 c#  c#-3.0  lambda 

17
ฉันจะโยนข้อยกเว้นตรวจสอบจากภายในสตรีม Java 8 ได้อย่างไร
ฉันจะโยนข้อยกเว้นตรวจสอบจากภายใน Java 8 สตรีม / lambdas ได้อย่างไร กล่าวอีกนัยหนึ่งฉันต้องการสร้างรหัสเช่นคอมไพล์นี้: public List&lt;Class&gt; getClasses() throws ClassNotFoundException { List&lt;Class&gt; classes = Stream.of("java.lang.Object", "java.lang.Integer", "java.lang.String") .map(className -&gt; Class.forName(className)) .collect(Collectors.toList()); return classes; } รหัสนี้ไม่ได้รวบรวมเนื่องจากClass.forName()วิธีการดังกล่าวข้างต้นพ่นClassNotFoundExceptionซึ่งมีการตรวจสอบ โปรดทราบฉันไม่ต้องการห่อข้อยกเว้นที่ตรวจสอบภายในข้อยกเว้นรันไทม์และโยนข้อยกเว้นที่ไม่ได้ตรวจสอบและแทนที่ ฉันต้องการที่จะโยนข้อยกเว้นการตรวจสอบตัวเองและไม่เพิ่มน่าเกลียดtry/ catchesกับกระแส

12
เรียงลำดับรายการโดยใช้ Lambda / Linq กับวัตถุ
ฉันมีชื่อของ "เรียงลำดับตามคุณสมบัติ" ในสตริง ฉันจะต้องใช้ Lambda / Linq เพื่อเรียงลำดับรายการของวัตถุ Ex: public class Employee { public string FirstName {set; get;} public string LastName {set; get;} public DateTime DOB {set; get;} } public void Sort(ref List&lt;Employee&gt; list, string sortBy, string sortDirection) { //Example data: //sortBy = "FirstName" //sortDirection = "ASC" or "DESC" if …

8
คุณจะทำการรวมภายนอกด้านซ้ายโดยใช้วิธีการขยาย 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 } ฉันจะแสดงงานเดียวกันโดยใช้วิธีการขยายได้อย่างไร เช่น Foo.GroupJoin(Bar, f =&gt; f.Foo_Id, b =&gt; b.Foo_Id, (f,b) =&gt; ???) .Select(???)
272 c#  linq-to-sql  lambda 

1
“ int main () {(([] () {}) ());}” ใช้ได้อย่างไร ++
ฉันเพิ่งเจอชิ้นส่วนที่ลึกลับของรหัสต่อไปนี้ int main(){(([](){})());} จัดรูปแบบใหม่ดังต่อไปนี้เพื่อให้อ่านง่ายขึ้น: int main(){ (([](){})()); // Um... what?!?! } แต่ฉันไม่เข้าใจว่า(([](){})())รหัสถูกต้องอย่างไร มันดูเหมือนไวยากรณ์ตัวชี้ฟังก์ชันไม่ได้ มันไม่สามารถเป็นกลอุบายการบรรทุกเกินพิกัดบางอย่างได้ รหัสคอมไพล์ตามที่เป็นอยู่ Google ไม่ได้ช่วยอะไรมากนักในการค้นหาสัญลักษณ์ทั้งหมด แต่มันก็คอมไพล์ใน Visual Studio 2010 และไม่มีผลอะไร ไม่มีข้อผิดพลาดและไม่มีคำเตือน ดังนั้นดูเหมือนรหัสที่ถูกต้อง ผมไม่เคยเห็นรหัสที่ถูกต้องใด ๆ ที่อยู่นอกมหัศจรรย์ของJavascriptและC คำแนะนำการทำงาน บางคนสามารถอธิบายได้ว่าวิธีนี้ใช้ได้อย่างไร C ++
271 c++  c++11  lambda  syntax 

10
ทำไมแลมบ์ดาของ C ++ 11 ต้องการคำหลัก“ ไม่แน่นอน” สำหรับการจับภาพโดยค่าเริ่มต้น
ตัวอย่างสั้น ๆ : #include &lt;iostream&gt; int main() { int n; [&amp;](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout &lt;&lt; n &lt;&lt; "\n"; // "10" } คำถาม: ทำไมเราต้องการmutableคำหลัก มันค่อนข้างแตกต่างจากการส่งพารามิเตอร์แบบดั้งเดิมไปยังฟังก์ชั่นที่ตั้งชื่อ เหตุผลเบื้องหลังคืออะไร …
256 c++  lambda  c++11 


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.