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

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

5
เหตุใดนิพจน์ C # แลมบ์ดาบางตัวจึงรวบรวมวิธีการคง
ดังที่คุณเห็นในโค้ดด้านล่างฉันได้ประกาศให้Action<>ออบเจ็กต์เป็นตัวแปร ใครช่วยแจ้งให้เราทราบได้ไหมว่าทำไมตัวแทนวิธีการดำเนินการนี้จึงทำงานเหมือนวิธีการคงที่ เหตุใดจึงส่งคืนtrueในรหัสต่อไปนี้ รหัส: public static void Main(string[] args) { Action<string> actionMethod = s => { Console.WriteLine("My Name is " + s); }; Console.WriteLine(actionMethod.Method.IsStatic); Console.Read(); } เอาท์พุท:
122 c#  .net  reflection  lambda 


9
"break" และ "ต่อ" ใน "forEach" ใน Kotlin
Kotlin มีฟังก์ชั่นการทำซ้ำที่ดีมากเช่นforEachหรือrepeatแต่ฉันไม่สามารถทำให้ตัวดำเนินการbreakและcontinueตัวดำเนินการทำงานร่วมกับพวกเขาได้ (ทั้งในและนอกพื้นที่): repeat(5) { break } (1..5).forEach { continue@forEach } เป้าหมายคือการเลียนแบบลูปตามปกติโดยมีไวยากรณ์การทำงานใกล้เคียงที่สุด เป็นไปได้แน่นอนใน Kotlin เวอร์ชันเก่า ๆ บางรุ่น แต่ฉันพยายามสร้างไวยากรณ์ขึ้นมาใหม่ ปัญหาอาจเป็นข้อบกพร่องเกี่ยวกับป้ายกำกับ (M12) แต่ฉันคิดว่าตัวอย่างแรกควรใช้งานได้อยู่ดี สำหรับฉันแล้วดูเหมือนว่าฉันเคยอ่านเคล็ดลับ / คำอธิบายประกอบพิเศษที่ไหนสักแห่ง แต่ฉันไม่พบข้อมูลอ้างอิงใด ๆ ในเรื่องนี้ อาจมีลักษณะดังต่อไปนี้: public inline fun repeat(times: Int, @loop body: (Int) -> Unit) { for (index in 0..times - 1) { body(index) } }
122 loops  foreach  lambda  kotlin 

10
คัดลอกสตรีมเพื่อหลีกเลี่ยง "สตรีมได้รับการดำเนินการแล้วหรือปิด"
ฉันต้องการทำสตรีม Java 8 ซ้ำเพื่อที่ฉันจะได้จัดการกับมันสองครั้ง ฉันสามารถcollectเป็นรายการและรับสตรีมใหม่จากสิ่งนั้น // doSomething() returns a stream List<A> thing = doSomething().collect(toList()); thing.stream()... // do stuff thing.stream()... // do other stuff แต่ฉันคิดว่าควรมีวิธีที่มีประสิทธิภาพ / สง่างามกว่านี้ มีวิธีคัดลอกสตรีมโดยไม่เปลี่ยนเป็นคอลเล็กชันหรือไม่? ฉันกำลังทำงานกับสตรีมของEithers จริงๆดังนั้นต้องการประมวลผลการฉายภาพด้านซ้ายทางเดียวก่อนที่จะย้ายไปยังการฉายภาพด้านขวาและจัดการด้วยวิธีอื่น แบบนี้ (ซึ่งจนถึงตอนนี้ฉันบังคับให้ใช้toListเคล็ดลับด้วย) List<Either<Pair<A, Throwable>, A>> results = doSomething().collect(toList()); Stream<Pair<A, Throwable>> failures = results.stream().flatMap(either -> either.left()); failures.forEach(failure -> ... ); Stream<A> successes …

9
แลมบ์ดานิพจน์มีประโยชน์นอกเหนือจากการบันทึกบรรทัดของโค้ดหรือไม่
แลมบ์ดานิพจน์มีประโยชน์นอกเหนือจากการบันทึกบรรทัดของโค้ดหรือไม่ lambdas มีคุณสมบัติพิเศษใดบ้างที่ช่วยแก้ปัญหาที่แก้ได้ไม่ยาก? การใช้งานทั่วไปที่ฉันเห็นคือแทนที่จะเขียนสิ่งนี้: Comparator<Developer> byName = new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getName().compareTo(o2.getName()); } }; เราสามารถใช้นิพจน์แลมบ์ดาเพื่อย่อโค้ด: Comparator<Developer> byName = (Developer o1, Developer o2) -> o1.getName().compareTo(o2.getName());
120 java  lambda  java-8 

6
แลมบ์ดาที่มีลูกศร 2 ตัวใน Java 8 หมายถึงอะไร
ฉันเคยอ่านบทแนะนำ Java 8 มาแล้วหลายครั้ง ตอนนี้ฉันพบหัวข้อต่อไปนี้: java รองรับ Currying หรือไม่? ที่นี่ฉันเห็นรหัสต่อไปนี้: IntFunction<IntUnaryOperator> curriedAdd = a -> b -> a + b; System.out.println(curriedAdd.apply(1).applyAsInt(12)); ฉันเข้าใจว่าตัวอย่างนี้รวม 2 องค์ประกอบ แต่ฉันไม่เข้าใจโครงสร้าง: a -> b -> a + b; ตามส่วนซ้ายของนิพจน์แถวนี้ควรใช้ฟังก์ชันต่อไปนี้: R apply(int value); ก่อนหน้านี้ฉันได้พบกับลูกศรเพียงลูกเดียวเท่านั้น
118 java  lambda  java-8  currying 

3
วิธีตรวจสอบว่าองค์ประกอบมีอยู่โดยใช้นิพจน์แลมบ์ดาหรือไม่?
โดยเฉพาะฉันมี TabPane และฉันต้องการทราบว่ามีองค์ประกอบที่มี ID เฉพาะอยู่หรือไม่ ดังนั้นฉันต้องการทำสิ่งนี้ด้วยแลมบ์ดานิพจน์ใน Java: boolean idExists = false; String idToCheck = "someId"; for (Tab t : tabPane.getTabs()){ if(t.getId().equals(idToCheck)) { idExists = true; } }
118 java  java-8  lambda 

5
มีวิธีระบุนิพจน์ C # lambda ที่ "ว่าง" หรือไม่?
ฉันต้องการประกาศนิพจน์แลมบ์ดา "ว่างเปล่า" ซึ่งทำได้ดีไม่มีอะไรเลย มีวิธีทำแบบนี้โดยไม่จำเป็นต้องใช้DoNothing()วิธีนี้หรือไม่? public MyViewModel() { SomeMenuCommand = new RelayCommand( x => DoNothing(), x => CanSomeMenuCommandExecute()); } private void DoNothing() { } private bool CanSomeMenuCommandExecute() { // this depends on my mood } เจตนาของฉันในการทำสิ่งนี้เป็นเพียงการควบคุมสถานะเปิดใช้งาน / ปิดใช้งานของคำสั่ง WPF ของฉัน แต่นั่นเป็นข้อยกเว้น บางทีมันอาจจะเช้าเกินไปสำหรับฉัน แต่ฉันคิดว่ามันต้องมีวิธีที่จะประกาศx => DoNothing()นิพจน์แลมด้าในลักษณะนี้เพื่อให้ได้สิ่งเดียวกัน: SomeMenuCommand = new RelayCommand( x => …
118 c#  lambda 

9
การแปลง. net Func <T> เป็น. net Expression <Func <T>>
การเปลี่ยนจาก lambda เป็น Expression ทำได้ง่ายโดยใช้วิธีการเรียก ... public void GimmeExpression(Expression&lt;Func&lt;T&gt;&gt; expression) { ((MemberExpression)expression.Body).Member.Name; // "DoStuff" } public void SomewhereElse() { GimmeExpression(() =&gt; thing.DoStuff()); } แต่ฉันต้องการเปลี่ยน Func ให้เป็นนิพจน์ในบางกรณีเท่านั้น ... public void ContainTheDanger(Func&lt;T&gt; dangerousCall) { try { dangerousCall(); } catch (Exception e) { // This next line does not work... Expression&lt;Func&lt;T&gt;&gt; DangerousExpression = …
118 c#  .net  lambda  expression  func 

10
ฉันจะรับทุกรายการที่ n จากรายการ <T> ได้อย่างไร?
ฉันใช้. NET 3.5 และต้องการได้รับทุก ๆ * n* th จากรายการ ฉันไม่ได้ใส่ใจว่ามันทำได้โดยใช้นิพจน์แลมบ์ดาหรือ LINQ แก้ไข ดูเหมือนคำถามนี้จะกระตุ้นให้เกิดการถกเถียงกันมากทีเดียว (ซึ่งเป็นสิ่งที่ดีใช่มั้ย?) สิ่งสำคัญที่ฉันได้เรียนรู้คือเมื่อคุณคิดว่าคุณรู้ทุกวิธีในการทำบางสิ่งบางอย่าง (แม้จะง่ายอย่างนี้ก็ตาม) ให้คิดใหม่!
115 c#  linq  list  lambda 

6
วิธีการดีบักสตรีม () แผนที่ (…) ด้วยนิพจน์แลมบ์ดา
ในโครงการของเราเรากำลังย้ายไปที่ java 8 และเรากำลังทดสอบคุณสมบัติใหม่ของมัน ในโครงการของฉันฉันใช้ภาคฝรั่งและฟังก์ชั่นในการกรองและการแปลงคอลเลกชันโดยใช้และCollections2.transformCollections2.filter ในการย้ายข้อมูลนี้ฉันจำเป็นต้องเปลี่ยนเช่น guava code เป็น java 8 การเปลี่ยนแปลง ดังนั้นการเปลี่ยนแปลงที่ฉันทำคือประเภทของ: List&lt;Integer&gt; naturals = Lists.newArrayList(1,2,3,4,5,6,7,8,9,10,11,12,13); Function &lt;Integer, Integer&gt; duplicate = new Function&lt;Integer, Integer&gt;(){ @Override public Integer apply(Integer n) { return n * 2; } }; Collection result = Collections2.transform(naturals, duplicate); ถึง... List&lt;Integer&gt; result2 = naturals.stream() .map(n -&gt; n …
115 java  debugging  lambda  java-8 

4
ฉันจะใช้ฟังก์ชัน computeIfAbsent ใหม่ได้อย่างไร
ฉันต้องการใช้Map.computeIfAbsentเป็นอย่างมากแต่มันนานเกินไปแล้วตั้งแต่ lambdas อยู่ในระดับปริญญาตรี เกือบจะโดยตรงจากเอกสาร: มันเป็นตัวอย่างของวิธีการทำสิ่งต่างๆแบบเก่า: Map&lt;String, Boolean&gt; whoLetDogsOut = new ConcurrentHashMap&lt;&gt;(); String key = "snoop"; if (whoLetDogsOut.get(key) == null) { Boolean isLetOut = tryToLetOut(key); if (isLetOut != null) map.putIfAbsent(key, isLetOut); } และวิธีใหม่: map.computeIfAbsent(key, k -&gt; new Value(f(k))); แต่ในตัวอย่างของพวกเขาฉันคิดว่าฉันไม่ค่อย "เข้าใจ" ฉันจะแปลงรหัสเพื่อใช้วิธีแลมด้าใหม่ในการแสดงสิ่งนี้ได้อย่างไร

11
การแก้ไขตัวแปรโลคัลจากภายในแลมด้า
การแก้ไขตัวแปรภายในforEachทำให้เกิดข้อผิดพลาดในการคอมไพล์: ปกติ int ordinal = 0; for (Example s : list) { s.setOrdinal(ordinal); ordinal++; } ด้วยแลมด้า int ordinal = 0; list.forEach(s -&gt; { s.setOrdinal(ordinal); ordinal++; }); มีความคิดอย่างไรในการแก้ไขปัญหานี้
115 java  lambda  java-8 

4
การใช้นิพจน์แลมบ์ดาสำหรับตัวจัดการเหตุการณ์
ขณะนี้ฉันมีเพจที่ประกาศไว้ดังนี้: public partial class MyPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //snip MyButton.Click += (o, i) =&gt; { //snip } } } ฉันเพิ่งย้ายไปที่. NET 3.5 จาก 1.1 ฉันจึงคุ้นเคยกับการเขียนตัวจัดการเหตุการณ์นอก Page_Load คำถามของฉันคือ; มีข้อบกพร่องด้านประสิทธิภาพหรือข้อผิดพลาดใด ๆ ที่ฉันควรระวังเมื่อใช้วิธีแลมบ์ดาสำหรับสิ่งนี้หรือไม่? ฉันชอบเพราะมันกระชับกว่า แต่ฉันไม่ต้องการเสียสละประสิทธิภาพเพื่อใช้มัน ขอบคุณ
114 c#  performance  events  lambda 

3
แลมด้าทั่วไปทำงานอย่างไรใน C ++ 14
แลมบ์ดาทั่วไปทำงานอย่างไร ( autoคีย์เวิร์ดเป็นประเภทอาร์กิวเมนต์) ในมาตรฐาน C ++ 14 มันขึ้นอยู่กับแม่แบบ C ++ ที่คอมไพเลอร์ประเภทอาร์กิวเมนต์แต่ละตัวสร้างฟังก์ชันใหม่ที่มีเนื้อความเดียวกัน แต่แทนที่ประเภท (ความหลากหลายของเวลาคอมไพล์) หรือคล้ายกับชื่อสามัญของ Java (การลบประเภท) มากกว่าหรือไม่? ตัวอย่างโค้ด: auto glambda = [](auto a) { return a; };
114 c++  lambda  auto  c++14 

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