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

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

1
เหตุใดพารามิเตอร์ประเภทจึงแข็งแรงกว่าจึงเป็นพารามิเตอร์วิธี
ทำไม public <R, F extends Function<T, R>> Builder<T> withX(F getter, R returnValue) {...} เข้มงวดมากขึ้นแล้ว public <R> Builder<T> with(Function<T, R> getter, R returnValue) {...} นี่คือการติดตามขึ้นไปบนทำไมแลมบ์ดาชนิดกลับไม่ได้ตรวจสอบที่รวบรวมเวลา ฉันพบว่าใช้วิธีการwithX()เช่น .withX(MyInterface::getLength, "I am not a Long") สร้างข้อผิดพลาดเวลารวบรวมที่ต้องการ: ประเภทของ getLength () จากประเภท BuilderExample.MyInterface มีความยาวไม่สามารถใช้ร่วมกับชนิดส่งคืนของ descriptor: String ในขณะที่ใช้วิธีการwith()ไม่ได้ ตัวอย่างเต็มรูปแบบ: import java.util.function.Function; public class SO58376589 { public static …

3
การเลือกลายเซ็นของเมธอดสำหรับแลมบ์ดานิพจน์ที่มีเป้าหมายหลายประเภท
ฉันตอบคำถามและพบเจอสถานการณ์ที่ไม่สามารถอธิบายได้ พิจารณารหัสนี้: interface ConsumerOne<T> { void accept(T a); } interface CustomIterable<T> extends Iterable<T> { void forEach(ConsumerOne<? super T> c); //overload } class A { private static CustomIterable<A> iterable; private static List<A> aList; public static void main(String[] args) { iterable.forEach(a -> aList.add(a)); //ambiguous iterable.forEach(aList::add); //ambiguous iterable.forEach((A a) -> aList.add(a)); //OK } …
11 java  generics  lambda  javac  ecj 

1
การอ้างอิงเมธอดและ Generics ใน Java-8
ฉันกำลังประสบปัญหากับการอ้างอิงวิธีการรวมกับประเภททั่วไป เรามีรหัสที่เราต้องเรียกใช้วิธีการโอเวอร์โหลด แต่มันล้มเหลวด้วยข้อผิดพลาด: ไม่สามารถแก้ไขค่า m1 () ฉันทำให้ปัญหาของฉันง่ายขึ้นเพื่อทำให้ชัดเจนว่าปัญหาอยู่ที่ใด รหัสต่อไปนี้ล้มเหลว: public class Test { void test() { // Getting error here setValue(C1::m1, Integer.ONE); } <E extends I1, T> void setValue(BiConsumer<E, T> cons, T value) { } } interface I1 { } class C1 implements I1 { void m1(Integer value) { } void …
11 java  generics  lambda  java-8 

5
C ++ การมอบหมายแบบสามภาคของแลมบ์ดา
ความคิดใดที่ว่าทำไมข้อมูลโค้ดต่อไปนี้ไม่ได้รวบรวม มันบ่นกับข้อผิดพลาด "ข้อผิดพลาด: ตัวถูกดำเนินการหรือไม่: มีประเภทที่แตกต่างกัน" auto lambda1 = [&](T& arg) { ... }; auto lambda2 = [&](T& arg) { ... }; auto lambda = condition ? lambda1 : lambda2;

2
การโทรไปแลมบ์ดานั้นไม่ชัดเจนแม้จะระบุประเภทการคืนอย่างชัดเจน
ฟังก์ชั่นโอเวอร์โหลดควรใช้ทั้งฟังก์ชั่นในเนื่องจากประเภทของแลมบ์ดานั้นสามารถนำกลับมาใช้ใหม่ได้std::function(โปรดแก้ไขให้ฉันถ้าฉันผิด) คำถามคือ: ทำไมมีข้อผิดพลาดในการคอมไพล์ด้านล่าง กำหนดไว้หรือไม่ ( [&]() -> Type {}) โปรดทราบว่าสำหรับวิธีแก้ปัญหาปัจจุบันของฉันฉันต้องการการดักจับโดยอ้างอิงนั่นคือสาเหตุที่รหัสประกอบด้วยตรรกะสำหรับมัน ตัวอย่างต่อไปนี้อธิบายถึงปัญหา: #include <iostream> #include <string> #include <functional> void do_some(std::function<void(int)> thing) { thing(5); } void do_some(std::function<bool(int)> thing) { if (thing(10)) { std::cout << "it's true!" << std::endl; } } int main() { int local_to_be_modified = 0; do_some( [&](int in) { local_to_be_modified …

6
วิธีค้นหาวันที่ล่าสุดจากค่าแม็พที่กำหนดใน java
ฉันกำลังแฮชแผนที่ที่มีค่าด้านล่างในค่าที่ฉันเคยเป็นชนิดข้อมูลสตริง ฉันต้องการเปรียบเทียบวันที่ทั้งหมดที่มีอยู่ในแผนที่และดึงคีย์ - ค่าเดียวเท่านั้นที่มีวันที่ล่าสุด ฉันอยากจะเปรียบเทียบกับค่าที่ไม่ใช่กุญแจ ฉันได้รวมรหัสด้านล่าง import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("1", "1999-01-01"); map.put("2", "2013-10-11"); map.put("3", "2011-02-20"); map.put("4", "2014-09-09"); map.forEach((k, v) -> System.out.println("Key : " + k + " Value : " + v)); } …

3
Java Stream: กรองด้วยหลายช่วง
ฉันกำลังพยายามกรองทรัพยากรและไม่รวมองค์ประกอบบางอย่างตามเขตข้อมูล หากต้องการยกเว้นฉันมีชุด (ที่มีรหัสที่ต้องยกเว้น) และรายการ (มีรหัสช่วงที่ต้องแยกออกหลายช่วง) ฉันเขียนตรรกะด้านล่างและฉันไม่พอใจกับตรรกะตัวกรองที่สอง มีวิธีที่ดีกว่าที่เราสามารถทำได้ด้วย Java 8 หรือไม่? ฉันต้องทำสิ่งเดียวกันเพื่อรวมช่วงต่างๆด้วย Set<String> extensionsToExclude = new HashSet<>(Arrays.asList("20","25","60","900")); List<String> rangesToExclude = new ArrayList<>(Arrays.asList("1-10","20-25","50-70","1000-1000000")); return directoryRecords.stream() .filter((directoryRecord) -> !extensionsToExclude.contains(directoryRecord.getExtensionNumber())) .filter((directoryRecord -> { Boolean include = true; for(String s : rangesToExclude) { String [] rangeArray = s.split("-"); Integer extension = Integer.parseInt(directoryRecord.getExtensionNumber()); if(extension <= Integer.parseInt(rangeArray[0]) …

3
การสร้างรหัสแลมบ์ดา C ++ พร้อมการเริ่มต้นใน C ++ 14
ฉันกำลังพยายามที่จะเข้าใจ / อธิบายรหัสโค้ดที่สร้างขึ้นเมื่อส่งผ่านการจับไปยัง lambdas โดยเฉพาะอย่างยิ่งในการจับภาพเริ่มต้นทั่วไปที่เพิ่มใน C ++ 14 ให้ตัวอย่างรหัสต่อไปนี้ด้านล่างนี้เป็นความเข้าใจปัจจุบันของฉันในสิ่งที่คอมไพเลอร์จะสร้าง กรณีที่ 1: การดักจับตามค่า / การดักจับเริ่มต้นตามค่า int x = 6; auto lambda = [x]() { std::cout << x << std::endl; }; จะถือเอา: class __some_compiler_generated_name { public: __some_compiler_generated_name(int x) : __x{x}{} void operator()() const { std::cout << __x << std::endl;} private: int __x; …
9 c++  lambda  c++14  move 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.