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

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

7
แลมด้าคืออะไร?
ใครช่วยให้คำอธิบายที่ดีว่า Lambda คืออะไร? เรามีแท็กสำหรับพวกเขาและพวกเขาอยู่ในความลับของคำถาม C # แต่ฉันยังไม่พบคำจำกัดความและคำอธิบายที่ดีในตอนแรก

2
เหตุใดฉันจึงจับสิ่งนี้โดยอ้างอิง ('& this') ในแลมบ์ดาไม่ได้
ฉันเข้าใจวิธีที่ถูกต้องในการจับภาพthis(เพื่อแก้ไขคุณสมบัติของวัตถุ) ในแลมบ์ดามีดังนี้: auto f = [this] () { /* ... */ }; แต่ฉันอยากรู้เกี่ยวกับลักษณะเฉพาะต่อไปนี้ที่ฉันเคยเห็น: class C { public: void foo() { // auto f = [] () { // this not captured auto f = [&] () { // why does this work? // auto f = [&this] () { // …
93 c++  c++11  lambda 

6
วิธีดำเนินการเข้าร่วมระหว่างหลายตารางใน LINQ lambda
ฉันพยายามทำการเข้าร่วมระหว่างหลาย ๆ ตารางใน LINQ ฉันมีชั้นเรียนต่อไปนี้: Product {Id, ProdName, ProdQty} Category {Id, CatName} ProductCategory{ProdId, CatId} //association table และฉันจะใช้รหัสต่อไปนี้ (ที่product, categoryและproductcategoryกรณีของการเรียนข้างต้น): var query = product.Join(productcategory, p => p.Id, pc => pc.ProdID, (p, pc) => new {product = p, productcategory = pc}) .Join(category, ppc => ppc.productcategory.CatId, c => c.Id, (ppc, c) => new …

4
รวบรวม C # Lambda Expressions Performance
พิจารณาการจัดการอย่างง่ายต่อไปนี้สำหรับคอลเลกชัน: static List<int> x = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var result = x.Where(i => i % 2 == 0).Where(i => i > 5); ตอนนี้มาใช้นิพจน์ รหัสต่อไปนี้เทียบเท่าโดยประมาณ: static void UsingLambda() { Func<IEnumerable<int>, IEnumerable<int>> lambda = l => l.Where(i => i % 2 …

12
Java 8 lambda รับและลบองค์ประกอบจากรายการ
ด้วยรายการองค์ประกอบฉันต้องการรับองค์ประกอบที่มีคุณสมบัติที่กำหนดและลบออกจากรายการ ทางออกที่ดีที่สุดที่ฉันพบคือ: ProducerDTO p = producersProcedureActive .stream() .filter(producer -> producer.getPod().equals(pod)) .findFirst() .get(); producersProcedureActive.remove(p); เป็นไปได้หรือไม่ที่จะรวมการรับและลบในนิพจน์แลมบ์ดา

7
ภาษาแลมบ์ดาคืออะไร?
ฉันกำลังอ่าน "JavaScript: The Good Parts" และผู้เขียนระบุว่า JavaScript เป็นภาษาแรกของแลมบ์ดาที่เปิดตัว ฟังก์ชันของ JavaScript เป็นออบเจ็กต์ชั้นหนึ่งที่มีการกำหนดขอบเขตคำศัพท์ (ส่วนใหญ่) JavaScript เป็นภาษาแลมบ์ดาแรกที่เข้าสู่กระแสหลัก ลึกลงไป JavaScript มีความคล้ายคลึงกับ Lisp และ Scheme มากกว่า Java มันคือเสียงกระเพื่อมในเสื้อผ้าของ C สิ่งนี้ทำให้ JavaScript เป็นภาษาที่ทรงพลังอย่างน่าทึ่ง ฉันไม่เข้าใจว่าภาษาแลมด้าคืออะไร ภาษาดังกล่าวมีคุณสมบัติอย่างไรและแตกต่างจากภาษาเช่น Java, C, C ++ และ Php อย่างไร

5
ทำไมแลมบ์ดาถึงมีขนาด 1 ไบต์?
ฉันกำลังทำงานกับหน่วยความจำของ lambdas บางตัวใน C ++ แต่ฉันงงกับขนาดของมันเล็กน้อย นี่คือรหัสทดสอบของฉัน: #include <iostream> #include <string> int main() { auto f = [](){ return 17; }; std::cout << f() << std::endl; std::cout << &f << std::endl; std::cout << sizeof(f) << std::endl; } คุณสามารถเรียกใช้ได้ที่นี่: http://fiddle.jyt.io/github/b13f682d1237eb69ebdc60728bb52598 ouptut คือ: 17 0x7d90ba8f626f 1 นี่แสดงให้เห็นว่าขนาดของแลมด้าของฉันคือ 1 เป็นไปได้อย่างไร? อย่างน้อยแลมด้าไม่ควรเป็นตัวชี้การนำไปใช้งานหรือไม่?
90 c++  c++11  lambda  c++14  sizeof 

6
วิธีการคืนค่าด้วยวิธีการไม่ระบุชื่อ?
สิ่งนี้ล้มเหลว string temp = () => {return "test";}; ด้วยข้อผิดพลาด ไม่สามารถแปลงนิพจน์แลมบ์ดาเป็นพิมพ์ 'สตริง' เนื่องจากไม่ใช่ประเภทผู้รับมอบสิทธิ์ ข้อผิดพลาดหมายถึงอะไรและฉันจะแก้ไขได้อย่างไร
90 c#  .net  lambda 

6
ฟังก์ชันที่ส่งคืนนิพจน์แลมบ์ดา
ฉันสงสัยว่าเป็นไปได้ไหมที่จะเขียนฟังก์ชันที่ส่งคืนฟังก์ชันแลมบ์ดาใน C ++ 11 แน่นอนปัญหาหนึ่งคือวิธีการประกาศฟังก์ชันดังกล่าว แลมบ์ดาแต่ละตัวมีประเภท แต่ประเภทนั้นไม่สามารถแสดงออกได้ใน C ++ ฉันไม่คิดว่าจะได้ผล: auto retFun() -> decltype ([](int x) -> int) { return [](int x) { return x; } } ไม่ใช่สิ่งนี้: int(int) retFun(); ฉันไม่ทราบถึงการแปลงอัตโนมัติใด ๆ จาก lambdas เป็นพูดชี้ไปยังฟังก์ชันหรือบางอย่าง วิธีแก้ปัญหาเดียวคือการประดิษฐ์วัตถุฟังก์ชันและส่งคืนหรือไม่?
90 c++  function  c++11  lambda 

6
เหตุใดฉันจึงไม่สามารถสร้างเวกเตอร์ของ lambdas (ชนิดเดียวกัน) ใน C ++ 11 ได้
ฉันพยายามสร้างเวกเตอร์แลมด้า แต่ล้มเหลว: auto ignore = [&]() { return 10; }; //1 std::vector<decltype(ignore)> v; //2 v.push_back([&]() { return 100; }); //3 ขึ้นกับสาย # 2 ก็รวบรวมดี แต่บรรทัด # 3 ให้ข้อผิดพลาดในการคอมไพล์ : ข้อผิดพลาด: ไม่มีฟังก์ชันที่ตรงกันสำหรับการเรียกไปที่ 'std :: vector <main () :: <lambda () >> :: push_back (main () :: <lambda ()>)' ฉันไม่ต้องการเวกเตอร์ของตัวชี้ฟังก์ชันหรือเวกเตอร์ของวัตถุฟังก์ชัน อย่างไรก็ตามเวกเตอร์ของวัตถุฟังก์ชันที่ห่อหุ้มนิพจน์แลมบ์ดาจริงจะใช้ได้สำหรับฉัน เป็นไปได้หรือไม่
90 c++  vector  lambda  c++11 

6
เหตุผลใดที่จะไม่ใช้ lambdas ทั่วโลก?
เรามีฟังก์ชั่นที่ใช้แลมบ์ดาภายในที่จับภาพตัวเองไม่ได้เช่น: void foo() { auto bar = [](int a, int b){ return a + b; } // code using bar(x,y) a bunch of times } ตอนนี้ฟังก์ชั่นการใช้งานของแลมบ์ดากลายเป็นที่ต้องการในที่อื่นดังนั้นฉันจะยกแลมบ์ดาออกจากfoo()ขอบเขตโกลบอล / เนมสเปซ ฉันสามารถทิ้งไว้เป็นแลมบ์ดาทำให้เป็นตัวเลือกคัดลอกวางหรือเปลี่ยนเป็นฟังก์ชันที่เหมาะสม: auto bar = [](int a, int b){ return a + b; } // option 1 int bar(int a, int b){ return …
89 c++  lambda 

7
ใช้ 'return' ในบล็อก Ruby
ฉันกำลังพยายามใช้ Ruby 1.9.1 สำหรับภาษาสคริปต์แบบฝังเพื่อให้โค้ด "end-user" ถูกเขียนในบล็อก Ruby ปัญหาหนึ่งของเรื่องนี้คือฉันต้องการให้ผู้ใช้สามารถใช้คีย์เวิร์ด 'return' ในบล็อกได้ดังนั้นพวกเขาจึงไม่จำเป็นต้องกังวลเกี่ยวกับค่าส่งคืนโดยปริยาย ด้วยเหตุนี้สิ่งนี้จึงเป็นสิ่งที่ฉันต้องการจะทำได้: def thing(*args, &block) value = block.call puts "value=#{value}" end thing { return 6 * 7 } หากฉันใช้ 'return' ในตัวอย่างข้างต้นฉันจะได้รับ LocalJumpError ฉันทราบว่านี่เป็นเพราะบล็อกที่เป็นปัญหาเป็น Proc ไม่ใช่แลมบ์ดา รหัสจะใช้งานได้ถ้าฉันลบ 'return' ออก แต่ฉันอยากจะใช้ 'return' ในสถานการณ์นี้จริงๆ เป็นไปได้หรือไม่ ฉันได้ลองแปลงบล็อกเป็นแลมด้าแล้ว แต่ผลลัพธ์ก็เหมือนกัน

3
การใช้รวมใน Entity Framework 4 ด้วยนิพจน์แลมบ์ดา
ฉันเคยเห็นบทความมากมายเกี่ยวกับวิธีเอาชนะเรื่องนี้ทั้งหมดที่เกี่ยวข้องกับ CTP4 หรือเพิ่มวิธีการขยายของฉันเอง มี EF4 "อย่างเป็นทางการ" รวมถึงวิธีการใช้นิพจน์แลมบ์ดาภายใน include หรือไม่ (สำหรับทั้งความสัมพันธ์ระดับแรกและระดับ 2 ขึ้นไป) หรือในที่สุดก็ไม่รวมอยู่ใน RTM? มีอยู่อย่างหนึ่ง - ฉันยินดีที่จะเรียนรู้วิธีการทำเช่นนี้เนื่องจากการใช้ lambda expression ในโค้ดของฉันตอนนี้ (ด้วย # system.data.entity # system.data.linq) ยังให้ฉัน: ไม่สามารถแปลงนิพจน์แลมบ์ดาเป็นพิมพ์ 'สตริง' เนื่องจากไม่ใช่ประเภทผู้รับมอบสิทธิ์ใน: var customers = from c in context.Customers.Include(c=>c.Phone)

7
Task.Run ด้วยพารามิเตอร์?
Threading.Tasksผมทำงานในโครงการเครือข่ายแบบมัลติทาสกิ้และฉันใหม่ ฉันใช้งานง่ายTask.Factory.StartNew()และฉันสงสัยว่าจะทำได้Task.Run()อย่างไร? นี่คือรหัสพื้นฐาน: Task.Factory.StartNew(new Action<object>( (x) => { // Do something with 'x' }), rawData); ฉันตรวจสอบSystem.Threading.Tasks.TaskในObject Browserแล้วไม่พบAction<T>พารามิเตอร์ like มีเพียงActionที่ใช้voidพารามิเตอร์และไม่มีประเภท มีเพียง 2 สิ่งที่คล้ายกัน: static Task Run(Action action)และstatic Task Run(Func<Task> function)แต่ไม่สามารถโพสต์พารามิเตอร์ด้วยทั้งสองอย่าง ใช่ฉันรู้ว่าฉันสามารถสร้างวิธีการขยายแบบง่าย ๆ ได้ แต่คำถามหลักของฉันคือเราสามารถเขียนเป็นบรรทัดเดียวด้วยTask.Run()?


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