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

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

4
มีเหตุผลสำหรับการใช้ตัวแปร C # ซ้ำใน foreach หรือไม่?
เมื่อใช้แลมบ์ดานิพจน์หรือวิธีที่ไม่ระบุตัวตนใน C # เราต้องระวังการเข้าถึงหลุมพรางปิดที่มีการแก้ไข ตัวอย่างเช่น: foreach (var s in strings) { query = query.Where(i => i.Prop == s); // access to modified closure ... } เนื่องจากการปิดการปรับเปลี่ยนรหัสดังกล่าวข้างต้นจะทำให้ทั้งหมดของคำสั่งในการค้นหาให้เป็นไปตามค่าสุดท้ายของWheres ดังที่อธิบายไว้ที่นี่สิ่งนี้เกิดขึ้นเพราะsตัวแปรที่ประกาศในforeachลูปด้านบนถูกแปลเช่นนี้ในคอมไพเลอร์: string s; while (enumerator.MoveNext()) { s = enumerator.Current; ... } แทนที่จะเป็นเช่นนี้: while (enumerator.MoveNext()) { string s; s = enumerator.Current; ... } ดังที่กล่าวไว้ที่นี่ไม่มีข้อได้เปรียบด้านประสิทธิภาพในการประกาศตัวแปรภายนอกลูปและภายใต้สถานการณ์ปกติเหตุผลเดียวที่ฉันคิดได้สำหรับการทำเช่นนี้คือถ้าคุณวางแผนที่จะใช้ตัวแปรนอกขอบเขตของลูป: string …

9
แลมบ์ดาแสดงออกใน C ++ 11 คืออะไร?
แลมบ์ดาแสดงออกใน C ++ 11 คืออะไร? ฉันจะใช้เมื่อใด ปัญหาประเภทใดที่พวกเขาแก้ได้ที่ไม่สามารถทำได้ก่อนการเปิดตัว? ตัวอย่างเล็ก ๆ น้อย ๆ และการใช้เคสจะมีประโยชน์
1487 c++  lambda  c++11  c++-faq 


21
Java 8 รายการ <V> ลงในแผนที่ <K, V>
ฉันต้องการแปลรายการวัตถุเป็นแผนที่โดยใช้สตรีมและแลมบ์ดาของ Java 8 นี่คือวิธีที่ฉันจะเขียนใน Java 7 และด้านล่าง private Map&lt;String, Choice&gt; nameMap(List&lt;Choice&gt; choices) { final Map&lt;String, Choice&gt; hashMap = new HashMap&lt;&gt;(); for (final Choice choice : choices) { hashMap.put(choice.getName(), choice); } return hashMap; } ฉันสามารถทำได้โดยใช้ Java 8 และ Guava แต่ฉันอยากรู้วิธีการทำสิ่งนี้โดยไม่ใช้ Guava ในฝรั่ง private Map&lt;String, Choice&gt; nameMap(List&lt;Choice&gt; choices) { return Maps.uniqueIndex(choices, new …

26
ทำไม Lambdas ของ Python จึงมีประโยชน์ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันพยายามที่จะเข้าใจลูกแกะงูหลาม แลมบ์ดาเป็นหนึ่งในรายการภาษาที่ "น่าสนใจ" ที่ควรลืมในชีวิตจริงหรือไม่? ฉันแน่ใจว่ามีบางกรณีที่อาจจำเป็นต้องใช้ขอบ แต่เนื่องจากความคลุมเครือของมันศักยภาพของมันถูกนิยามใหม่ในรุ่นอนาคต (สมมติฐานของฉันขึ้นอยู่กับคำจำกัดความต่าง ๆ ของมัน) และลดความชัดเจนของการเข้ารหัส ต้องหลีกเลี่ยง? สิ่งนี้ทำให้ฉันนึกถึงการโอเวอร์โฟลว์ (บัฟเฟอร์โอเวอร์โฟลว์) ของชนิด C - ชี้ไปที่ตัวแปรด้านบนและการโหลดมากเกินไปเพื่อตั้งค่าฟิลด์อื่น มันให้ความรู้สึกเหมือนเป็นนักแสดงที่มีความเชี่ยวชาญ แต่เป็นฝันร้ายของผู้ดูแลรหัส

14
รายการความเข้าใจกับตัวกรองแลมบ์ดา +
ฉันพบว่าตัวเองมีความจำเป็นในการกรองขั้นพื้นฐาน: ฉันมีรายการและฉันต้องกรองตามคุณลักษณะของรายการ รหัสของฉันดูเหมือนว่านี้: my_list = [x for x in my_list if x.attribute == value] แต่ฉันก็คิดว่ามันคงจะดีกว่าถ้าเขียนมันแบบนี้? my_list = filter(lambda x: x.attribute == value, my_list) สามารถอ่านได้มากขึ้นและหากจำเป็นสำหรับการแสดงแลมบ์ดาสามารถนำออกมาเพื่อรับบางสิ่งได้ คำถามคือมีคำเตือนในการใช้วิธีที่สองหรือไม่? มีความแตกต่างด้านประสิทธิภาพหรือไม่ ฉันทำ Pythonic Way ™หายไปทั้งหมดและควรทำในวิธีอื่น (เช่นใช้ itemgetter แทนที่จะเป็นแลมบ์ดา) หรือไม่?

11
อะไรคือความแตกต่างระหว่าง 'การปิด' และ 'แลมบ์ดา'?
มีคนอธิบายได้ไหม ฉันเข้าใจแนวคิดพื้นฐานที่อยู่เบื้องหลังพวกเขา แต่ฉันมักจะเห็นพวกเขาใช้สลับกันได้และฉันสับสน และตอนนี้เราอยู่ที่นี่พวกเขาแตกต่างจากฟังก์ชั่นปกติอย่างไร

18
ความแตกต่าง () กับแลมบ์ดา?
ใช่ฉันมีจำนวนมากและต้องการรับค่าที่แตกต่างจากมัน ใช้มีแน่นอนวิธีขยายที่เรียกว่าSystem.Linq Distinctในกรณีง่าย ๆ มันสามารถใช้โดยไม่มีพารามิเตอร์เช่น: var distinctValues = myStringList.Distinct(); ดีและดี แต่ถ้าฉันมีจำนวนวัตถุที่ฉันต้องระบุความเท่าเทียมกันเกินพิกัดที่มีอยู่เท่านั้นคือ: var distinctValues = myCustomerList.Distinct(someEqualityComparer); อาร์กิวเมนต์เท่าเทียมกัน Comparer IEqualityComparer&lt;T&gt;ต้องเป็นตัวอย่างของ แน่นอนว่าฉันสามารถทำสิ่งนี้ได้ แต่มันค่อนข้างละเอียดและดูดี สิ่งที่ฉันคาดหวังก็คือโอเวอร์โหลดที่จะเอาแลมบ์ดาพูด Func &lt;T, T, bool&gt;: var distinctValues = myCustomerList.Distinct((c1, c2) =&gt; c1.CustomerId == c2.CustomerId); มีใครทราบบ้างไหมว่าส่วนขยายดังกล่าวมีอยู่หรือไม่ หรือฉันกำลังพลาดอะไรอยู่? หรือมีวิธีระบุ IEqualityComparer inline (ทำให้ลำบากใจฉัน) หรือไม่ ปรับปรุง ฉันพบคำตอบของ Anders Hejlsberg ต่อการโพสต์ในฟอรัม MSDN ในหัวข้อนี้ เขาพูดว่า: ปัญหาที่คุณจะพบคือเมื่อวัตถุสองตัวเปรียบเทียบกันเท่ากับพวกเขาจะต้องมีค่าส่งคืน …


16
รับทุกประเภทที่ใช้อินเตอร์เฟส
ใช้การไตร่ตรองฉันจะทำให้ทุกประเภทที่ใช้อินเทอร์เฟซกับ C # 3.0 / .NET 3.5 มีโค้ดน้อยที่สุดและลดการทำซ้ำให้น้อยที่สุดได้อย่างไร นี่คือสิ่งที่ฉันต้องการเขียนใหม่: foreach (Type t in this.GetType().Assembly.GetTypes()) if (t is IMyInterface) ; //do stuff

21
การดึงชื่อคุณสมบัติจากแลมบ์ดานิพจน์
มีวิธีที่ดีกว่าที่จะได้รับชื่อทรัพย์สินเมื่อส่งผ่านผ่านการแสดงออกแลมบ์ดา? นี่คือสิ่งที่ฉันมีอยู่ในปัจจุบัน เช่น. GetSortingInfo&lt;User&gt;(u =&gt; u.UserId); มันทำงานโดยการหล่อมันเป็น memberexpression เฉพาะเมื่อคุณสมบัติเป็นสตริง เพราะคุณสมบัติไม่ทั้งหมดเป็นสตริงที่ฉันต้องใช้วัตถุ แต่แล้วมันจะส่งกลับ unaryexpression สำหรับเหล่านั้น public static RouteValueDictionary GetInfo&lt;T&gt;(this HtmlHelper html, Expression&lt;Func&lt;T, object&gt;&gt; action) where T : class { var expression = GetMemberInfo(action); string name = expression.Member.Name; return GetInfo(html, name); } private static MemberExpression GetMemberInfo(Expression method) { LambdaExpression lambda = method as …

22
การหาค่าเฉลี่ยของรายการ
ฉันต้องค้นหาค่าเฉลี่ยของรายการใน Python นี่คือรหัสของฉันจนถึงตอนนี้ l = [15, 18, 2, 36, 12, 78, 5, 6, 9] print reduce(lambda x, y: x + y, l) ฉันได้มันมาแล้วมันจะรวมค่าต่าง ๆ ในรายการเข้าด้วยกัน แต่ฉันไม่รู้ว่าจะแบ่งมันเป็นอย่างไร
473 python  list  lambda  average  reduce 

25
ฟังก์ชั่น Java 8 Lambda ที่ส่งข้อยกเว้น?
ฉันรู้วิธีสร้างการอ้างอิงถึงวิธีการที่มีStringพารามิเตอร์และส่งกลับค่าเป็นint: Function&lt;String, Integer&gt; อย่างไรก็ตามวิธีนี้ใช้ไม่ได้หากฟังก์ชั่นมีข้อผิดพลาดสมมติว่ามันถูกกำหนดเป็น: Integer myMethod(String s) throws IOException ฉันจะกำหนดข้อมูลอ้างอิงนี้ได้อย่างไร
469 java  lambda  java-8 

9
เข้าร่วม / ที่ไหนด้วย LINQ และ Lambda
ฉันมีปัญหากับแบบสอบถามที่เขียนใน LINQ และ Lambda จนถึงตอนนี้ฉันได้รับข้อผิดพลาดมากมายที่นี่เป็นรหัสของฉัน: int id = 1; var query = database.Posts.Join(database.Post_Metas, post =&gt; database.Posts.Where(x =&gt; x.ID == id), meta =&gt; database.Post_Metas.Where(x =&gt; x.Post_ID == id), (post, meta) =&gt; new { Post = post, Meta = meta }); ฉันใหม่กับการใช้ LINQ ดังนั้นฉันไม่แน่ใจว่าแบบสอบถามนี้ถูกต้องหรือไม่
458 c#  linq  join  lambda 

14
การดึงรายการจาก java.util.stream.Stream ใน Java 8
ฉันกำลังเล่นกับ lambdas Java 8 เพื่อกรองคอลเลกชันได้อย่างง่ายดาย แต่ฉันไม่พบวิธีรัดกุมในการดึงผลลัพธ์เป็นรายการใหม่ภายในข้อความเดียวกัน นี่คือแนวทางที่รัดกุมที่สุดของฉัน: List&lt;Long&gt; sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L); List&lt;Long&gt; targetLongList = new ArrayList&lt;&gt;(); sourceLongList.stream().filter(l -&gt; l &gt; 100).forEach(targetLongList::add); ตัวอย่างบนอินเทอร์เน็ตไม่ได้ตอบคำถามของฉันเพราะพวกเขาหยุดโดยไม่สร้างรายการผลลัพธ์ใหม่ จะต้องมีวิธีที่กระชับกว่านี้ ฉันจะคาดหวังว่าStreamชั้นมีวิธีการเป็นtoList(), toSet()... มีวิธีที่ตัวแปรtargetLongListสามารถกำหนดโดยตรงโดยบรรทัดที่สามหรือไม่?

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