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

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

7
ใน Java 8 ฉันจะแปลง Map <K, V> เป็น Map <K, V> อื่นโดยใช้แลมบ์ดาได้อย่างไร?
ฉันเพิ่งเริ่มดู Java 8 และลอง lambdas ฉันคิดว่าฉันพยายามที่จะเขียนสิ่งที่ง่ายมากที่ฉันเขียนเมื่อเร็ว ๆ นี้ ฉันต้องเปลี่ยน Map of String to Column เป็น Map อื่นของ String to Column โดยที่ Column ใน Map ใหม่นั้นเป็นการป้องกันสำเนาของ Column ใน Map แรก คอลัมน์มีตัวสร้างสำเนา สิ่งที่ฉันได้ใกล้เคียงที่สุดคือ: Map&lt;String, Column&gt; newColumnMap= new HashMap&lt;&gt;(); originalColumnMap.entrySet().stream().forEach(x -&gt; newColumnMap.put(x.getKey(), new Column(x.getValue()))); แต่ฉันแน่ใจว่าต้องมีวิธีที่ดีกว่าในการทำและฉันจะขอบคุณสำหรับคำแนะนำบางอย่าง
140 java  map  lambda  java-8  java-stream 

7
เหตุใดจึงไม่สามารถกำหนดวิธีที่ไม่ระบุชื่อให้ var ได้
ฉันมีรหัสต่อไปนี้: Func&lt;string, bool&gt; comparer = delegate(string value) { return value != "0"; }; อย่างไรก็ตามสิ่งต่อไปนี้ไม่ได้รวบรวม: var comparer = delegate(string value) { return value != "0"; }; ทำไมคอมไพเลอร์ไม่สามารถคิดได้ว่ามันคือFunc&lt;string, bool&gt;อะไร? ใช้พารามิเตอร์สตริงเดียวและส่งคืนบูลีน แต่มันทำให้ฉันมีข้อผิดพลาด: ไม่สามารถกำหนดเมธอดแบบไม่ระบุชื่อให้กับตัวแปรโลคัลที่พิมพ์โดยนัย ฉันมีหนึ่งเดาและนั่นคือถ้ารุ่น var รวบรวมมันจะขาดความมั่นคงถ้าฉันมีต่อไปนี้: var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) { return false; }; …

6
ทางเลือก orElse ทางเลือกใน Java
ฉันได้ทำงานกับประเภทตัวเลือกใหม่ใน Java 8และฉันได้พบกับสิ่งที่ดูเหมือนเป็นการดำเนินการทั่วไปที่ไม่รองรับฟังก์ชัน: an "orElseOptional" พิจารณารูปแบบต่อไปนี้: Optional&lt;Result&gt; resultFromServiceA = serviceA(args); if (resultFromServiceA.isPresent) return result; else { Optional&lt;Result&gt; resultFromServiceB = serviceB(args); if (resultFromServiceB.isPresent) return resultFromServiceB; else return serviceC(args); } รูปแบบนี้มีหลายรูปแบบ แต่ต้องการให้ "orElse" เป็นทางเลือกที่ใช้ฟังก์ชันสร้างทางเลือกใหม่ซึ่งเรียกว่าเมื่อไม่มีรูปแบบปัจจุบันเท่านั้น การใช้งานจะมีลักษณะดังนี้: public Optional&lt;T&gt; orElse(Supplier&lt;Optional&lt;? extends T&gt;&gt; otherSupplier) { return value != null ? this : other.get(); } ฉันอยากรู้ว่ามีเหตุผลที่วิธีการดังกล่าวไม่มีอยู่จริงหรือไม่ถ้าฉันแค่ใช้ตัวเลือกเสริมโดยไม่ได้ตั้งใจและวิธีอื่น …
138 java  lambda  java-8  optional  java-9 

3
จะเรียงด้วยแลมด้ายังไง?
sort(mMyClassVector.begin(), mMyClassVector.end(), [](const MyClass &amp; a, const MyClass &amp; b) { return a.mProperty &gt; b.mProperty; }); ฉันต้องการใช้ฟังก์ชันแลมบ์ดาเพื่อจัดเรียงคลาสที่กำหนดเองแทนการผูกวิธีอินสแตนซ์ อย่างไรก็ตามรหัสด้านบนให้ข้อผิดพลาด: ข้อผิดพลาด C2564: 'const char *': การแปลงรูปแบบฟังก์ชันเป็นชนิดที่มีอยู่แล้วภายในสามารถรับอาร์กิวเมนต์เดียวเท่านั้น มันใช้งานได้ดีกับboost::bind(&amp;MyApp::myMethod, this, _1, _2).
138 c++  sorting  lambda  char  const 

2
นี่เป็นข้อบกพร่องของคอมไพเลอร์ C # หรือไม่?
ฉันกำลังตอบคำถามเกี่ยวกับความเป็นไปได้ของการปิด (อย่างถูกกฎหมาย) การยืดอายุการใช้งานของวัตถุเมื่อฉันพบโค้ดโคเจนที่แปลกประหลาดมากในส่วนของคอมไพเลอร์ C # (4.0 ถ้าสำคัญ) repro ที่สั้นที่สุดที่ฉันสามารถค้นหาได้มีดังต่อไปนี้: สร้างแลมบ์ดาที่จับภาพท้องถิ่นในขณะที่เรียกใช้ วิธีการคงที่ของประเภทที่มี กำหนดผู้รับมอบสิทธิ์อ้างอิงสร้างฟิลด์อินสแตนซ์ของวัตถุที่ประกอบด้วย ผลลัพธ์: คอมไพเลอร์สร้างการปิดวัตถุที่อ้างอิงวัตถุที่สร้างแลมบ์ดาเมื่อไม่มีเหตุผล - เป้าหมาย 'ภายใน' ของผู้รับมอบสิทธิ์เป็นวิธีการคงที่และสมาชิกอินสแตนซ์ของแลมบ์ด้าการสร้างวัตถุไม่จำเป็น ถูก (และไม่) แตะเมื่อผู้รับมอบสิทธิ์ถูกดำเนินการ คอมไพเลอร์ทำหน้าที่เหมือนโปรแกรมเมอร์ที่จับได้thisโดยไม่มีเหตุผล class Foo { private Action _field; public void InstanceMethod() { var capturedVariable = Math.Pow(42, 1); _field = () =&gt; StaticMethod(capturedVariable); } private static void StaticMethod(double arg) { } …

4
เป็นไปได้หรือไม่ที่จะหาประเภทพารามิเตอร์และประเภทผลตอบแทนของแลมด้า
เมื่อพิจารณาแลมบ์ดาเป็นไปได้ไหมที่จะหาประเภทพารามิเตอร์และประเภทการส่งคืน ถ้าใช่อย่างไร โดยพื้นฐานแล้วฉันต้องการlambda_traitsที่สามารถใช้ในรูปแบบต่อไปนี้: auto lambda = [](int i) { return long(i*10); }; lambda_traits&lt;decltype(lambda)&gt;::param_type i; //i should be int lambda_traits&lt;decltype(lambda)&gt;::return_type l; //l should be long แรงจูงใจเบื้องหลังคือฉันต้องการใช้lambda_traitsในเทมเพลตฟังก์ชันซึ่งยอมรับแลมบ์ดาเป็นอาร์กิวเมนต์และฉันจำเป็นต้องรู้ว่าเป็นประเภทพารามิเตอร์และประเภทผลตอบแทนภายในฟังก์ชัน: template&lt;typename TLambda&gt; void f(TLambda lambda) { typedef typename lambda_traits&lt;TLambda&gt;::param_type P; typedef typename lambda_traits&lt;TLambda&gt;::return_type R; std::function&lt;R(P)&gt; fun = lambda; //I want to do this! //... } …

8
นิพจน์ C # lambda สามารถมีมากกว่าหนึ่งคำสั่งได้หรือไม่?
นิพจน์ C # แลมบ์ดาสามารถมีคำสั่งมากกว่าหนึ่งคำได้หรือไม่ (แก้ไข: ตามที่อ้างถึงในหลายคำตอบด้านล่างคำถามนี้เดิมถามเกี่ยวกับ "บรรทัด" มากกว่า "ข้อความ")
135 c#  lambda 

7
ตัวแปรที่ใช้ในแลมบ์ดานิพจน์ควรเป็นขั้นสุดท้ายหรือมีประสิทธิผลสุดท้าย
ตัวแปรที่ใช้ในแลมบ์ดานิพจน์ควรเป็นขั้นสุดท้ายหรือมีประสิทธิผลสุดท้าย เมื่อฉันพยายามใช้calTzมันแสดงข้อผิดพลาดนี้ private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) { try { cal.getComponents().getComponents("VTIMEZONE").forEach(component -&gt; { VTimeZone v = (VTimeZone) component; v.getTimeZoneId(); if (calTz == null) { calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue()); } }); } catch (Exception e) { log.warn("Unable to determine ical timezone", e); } return null; }
135 java  lambda 

1
'SAM type' ใน Java คืออะไร?
เมื่ออ่านข้อมูลจำเพาะ Java-8 ฉันมักจะเห็นการอ้างอิงถึง 'ประเภท SAM' ฉันยังไม่สามารถหาคำอธิบายที่ชัดเจนได้ว่านี่คืออะไร ประเภท SAM คืออะไรและสถานการณ์ตัวอย่างของเวลาที่จะใช้คืออะไร?
133 java  lambda  java-8 

9
การใช้ตัวแทนการดำเนินการใน C # [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการ1 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันทำงานร่วมกับ Action Delegates ใน C # ด้วยความหวังว่าจะได้เรียนรู้เพิ่มเติมเกี่ยวกับพวกเขาและคิดว่าพวกเขาจะมีประโยชน์ในจุดใด มีใครใช้ Action Delegate หรือไม่และถ้าเป็นเช่นนั้นเพราะเหตุใด หรือคุณช่วยยกตัวอย่างที่อาจเป็นประโยชน์ได้ไหม
132 c#  lambda  delegates  action 

2
ในตัว Java 8 เพรดิเคตที่คืนค่าจริงเสมอ?
Google ฝรั่งมีกริยาที่ผลตอบแทนเสมอ trueJava 8 มีบางอย่างที่คล้ายกันPredicateหรือไม่? ฉันรู้ว่าฉันสามารถใช้แต่ฉันต้องการบางสิ่งบางอย่างที่ทำไว้ล่วงหน้าเพื่อที่คล้ายคลึงกัน(foo)-&gt;{return true;}Collections.emptySet()
130 java  lambda  java-8  predicate 

2
แลมบ์ดาจับและพารามิเตอร์ที่มีชื่อเดียวกันใครเป็นเงาของอีกฝ่าย? (เสียงดังกับ gcc)
auto foo = "You're using g++!"; auto compiler_detector = [foo](auto foo) { std::puts(foo); }; compiler_detector("You're using clang++!"); เสียงดัง ++ 3.6.0และใหม่กว่าพิมพ์"คุณกำลังใช้เสียงดัง ++!" และเตือนเกี่ยวกับการจับภาพ fooที่ไม่ได้ใช้งาน g ++ 4.9.0และใหม่กว่าพิมพ์"คุณกำลังใช้ g ++!" และเตือนเกี่ยวกับพารามิเตอร์ fooที่ไม่ได้ใช้งาน คอมไพเลอร์ใดที่ทำตามมาตรฐาน C ++ ได้แม่นยำกว่าที่นี่ ตัวอย่าง Wandbox

6
แลมด้ากลับมาเอง: ถูกกฎหมายหรือไม่?
พิจารณาโปรแกรมที่ไร้ประโยชน์นี้: #include &lt;iostream&gt; int main(int argc, char* argv[]) { int a = 5; auto it = [&amp;](auto self) { return [&amp;](auto b) { std::cout &lt;&lt; (a + b) &lt;&lt; std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } โดยพื้นฐานแล้วเราพยายามสร้างแลมด้าที่คืนค่าตัวเอง MSVC รวบรวมโปรแกรมและทำงาน gcc รวบรวมโปรแกรมและ segfaults เสียงดังปฏิเสธโปรแกรมด้วยข้อความ: error: function 'operator()&lt;(lambda at lam.cpp:6:13)&gt;' with deduced …

8
เหตุใดจึงต้องแคสต์นิพจน์แลมบ์ดาเมื่อระบุเป็นพารามิเตอร์ Delegate ธรรมดา
ใช้เมธอด System.Windows.Forms.Control.Invoke (Delegate method) เหตุใดจึงทำให้เกิดข้อผิดพลาดเวลาคอมไพล์: string str = "woop"; Invoke(() =&gt; this.Text = str); // Error: Cannot convert lambda expression to type 'System.Delegate' // because it is not a delegate type ยังใช้งานได้ดี: string str = "woop"; Invoke((Action)(() =&gt; this.Text = str)); เมื่อเมธอดคาดว่าจะมี Delegate ธรรมดา?
124 c#  c#-3.0  delegates  lambda 

2
c ++ 11 lambdas จับตัวแปรที่ไม่ได้ใช้หรือไม่
เมื่อฉันใช้[=]เพื่อบ่งชี้ว่าผมอยากตัวแปรท้องถิ่นทั้งหมดจะถูกจับโดยค่าในแลมบ์ดาจะส่งผลให้ทุกตัวแปรท้องถิ่นในฟังก์ชั่นการคัดลอกหรือเพียงแค่ทุกตัวแปรท้องถิ่นที่ใช้โดยแลมบ์ดา ? ตัวอย่างเช่นถ้าฉันมี: vector&lt;int&gt; my_huge_vector(100000); int my_measly_int; some_function([=](int i){ return my_measly_int + i; }); my_huge_vector จะถูกคัดลอกหรือไม่แม้ว่าฉันจะไม่ได้ใช้ในแลมบ์ดา
124 c++  lambda  c++11 

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