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

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

7
Java 8: TriFunction (และ kin) ใน java.util.function อยู่ที่ไหน หรือมีทางเลือกอย่างไร?
ฉันเห็น java.util.function.BiFunction ดังนั้นฉันจึงสามารถทำได้: BiFunction<Integer, Integer, Integer> f = (x, y) -> { return 0; }; จะเกิดอะไรขึ้นถ้าสิ่งนั้นไม่ดีพอและฉันต้องการ TriFunction? มันไม่มี! TriFunction<Integer, Integer, Integer, Integer> f = (x, y, z) -> { return 0; }; ฉันเดาว่าฉันควรเพิ่มว่าฉันรู้ว่าฉันสามารถกำหนด TriFunction ของตัวเองได้ฉันแค่พยายามเข้าใจเหตุผลเบื้องหลังโดยไม่รวมไว้ในไลบรารีมาตรฐาน
113 java  lambda  java-8 

10
นิพจน์แลมบ์ดาเพื่อแปลงอาร์เรย์ / รายการสตริงเป็นอาร์เรย์ / รายการจำนวนเต็ม
เนื่องจาก Java 8 มาพร้อมกับนิพจน์แลมด้าอันทรงพลัง ฉันต้องการเขียนฟังก์ชันเพื่อแปลง List / array ของ Strings เป็น array / List of Integers, Floats, Doubles ฯลฯ .. ใน Java ปกติมันจะง่ายพอ ๆ กับ for(String str : strList){ intList.add(Integer.valueOf(str)); } แต่ฉันจะบรรลุสิ่งเดียวกันกับแลมด้าได้อย่างไรโดยกำหนดอาร์เรย์ของสตริงที่จะแปลงเป็นอาร์เรย์ของจำนวนเต็ม

2
Comparator.reversed () ไม่รวบรวมโดยใช้ lambda
ฉันมีรายการที่มีวัตถุผู้ใช้บางอย่างและฉันกำลังพยายามจัดเรียงรายการ แต่ใช้งานได้โดยใช้การอ้างอิงวิธีการเท่านั้นด้วยนิพจน์แลมบ์ดาคอมไพเลอร์ให้ข้อผิดพลาด: List<User> userList = Arrays.asList(u1, u2, u3); userList.sort(Comparator.comparing(u -> u.getName())); // works userList.sort(Comparator.comparing(User::getName).reversed()); // works userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error ข้อผิดพลาด: com\java8\collectionapi\CollectionTest.java:35: error: cannot find symbol userList.sort(Comparator.comparing(u -> u.getName()).reversed()); ^ symbol: method getName() location: variable u of type Object 1 error

7
Java8 Lambdas เทียบกับคลาส Anonymous
เนื่องจาก Java8 ได้รับการเผยแพร่เมื่อไม่นานมานี้และนิพจน์แลมบ์ดาใหม่เอี่ยมนั้นดูดีมากฉันสงสัยว่านี่หมายถึงการตายของคลาส Anonymous ที่เราคุ้นเคยหรือไม่ ฉันได้ค้นคว้าข้อมูลเล็กน้อยเกี่ยวกับเรื่องนี้และพบตัวอย่างที่น่าสนใจเกี่ยวกับวิธีที่นิพจน์แลมบ์ดาจะแทนที่คลาสเหล่านั้นอย่างเป็นระบบเช่นวิธีการจัดเรียงของคอลเลคชันซึ่งเคยได้รับอินสแตนซ์ของตัวเปรียบเทียบแบบไม่ระบุชื่อเพื่อทำการจัดเรียง: Collections.sort(personList, new Comparator<Person>(){ public int compare(Person p1, Person p2){ return p1.firstName.compareTo(p2.firstName); } }); ตอนนี้สามารถทำได้โดยใช้ Lambdas: Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName)); และดูกระชับอย่างน่าประหลาด. คำถามของฉันคือมีเหตุผลอะไรที่จะใช้คลาสเหล่านั้นใน Java8 แทน Lambdas ต่อไปหรือไม่? แก้ไข คำถามเดียวกัน แต่ในทางตรงกันข้ามประโยชน์ของการใช้ Lambdas แทนคลาส Anonymous คืออะไรเนื่องจาก Lambdas สามารถใช้ได้กับอินเทอร์เฟซวิธีการเดียวเท่านั้นคุณลักษณะใหม่นี้เป็นเพียงทางลัดที่ใช้ในบางกรณีเท่านั้นหรือมีประโยชน์จริงหรือไม่


4
Lambda Expression และวิธีการทั่วไป
สมมติว่าฉันมีอินเทอร์เฟซทั่วไป: interface MyComparable<T extends Comparable<T>> { public int compare(T obj1, T obj2); } และวิธีการsort: public static <T extends Comparable<T>> void sort(List<T> list, MyComparable<T> comp) { // sort the list } ฉันสามารถเรียกใช้วิธีนี้และส่งนิพจน์แลมบ์ดาเป็นอาร์กิวเมนต์: List<String> list = Arrays.asList("a", "b", "c"); sort(list, (a, b) -> a.compareTo(b)); ที่จะทำงานได้ดี แต่ตอนนี้ถ้าฉันทำให้อินเทอร์เฟซไม่ใช่แบบทั่วไปและวิธีการทั่วไป: interface MyComparable { public <T extends …
111 java  generics  lambda  java-8 

4
C # Pass Lambda Expression เป็นพารามิเตอร์วิธีการ
ฉันมีนิพจน์แลมบ์ดาที่ฉันต้องการจะส่งต่อและนำกลับมาใช้ใหม่ได้ นี่คือรหัส: public List<IJob> getJobs(/* i want to pass the lambda expr in here */) { using (SqlConnection connection = new SqlConnection(getConnectionString())) { connection.Open(); return connection.Query<FullTimeJob, Student, FullTimeJob>(sql, (job, student) => { job.Student = student; job.StudentId = student.Id; return job; }, splitOn: "user_id", param: parameters).ToList<IJob>(); } คีย์ตรงนี้คือฉันต้องการส่งนิพจน์แลมบ์ดาที่ฉันใช้ตรงนี้ไปยังเมธอดที่เรียกรหัสนี้เพื่อที่ฉันจะได้ใช้ซ้ำ นิพจน์แลมบ์ดาเป็นอาร์กิวเมนต์ที่สองภายในเมธอด. เคียวรีของฉัน ฉันสมมติว่าฉันต้องการใช้ …
107 c#  linq  lambda 

2
มันคือ Linq หรือ Lambda?
ฉันรู้ว่านี่คือ Linq: var _Results = from item in _List where item.Value == 1 select item; และฉันรู้ว่านี่คือแลมด้า: var _Results = _List.Where(x => x.Value == 1); หมายเหตุบรรณาธิการ:ข้างต้นไม่ได้เป็นเพียง Lambda แต่เป็น Linq ที่ใช้ "Method Syntax" ซึ่งมีเพรดิเคตเป็น Lambda เพื่อความชัดเจนทั้งสองตัวอย่างข้างต้นคือ Linq (โพสต์ต้นฉบับของฉันไม่ถูกต้อง แต่ฉันทิ้งข้อผิดพลาดไว้เพื่อแสดงให้เห็นถึงความสับสนที่ทำให้เกิดคำถาม) แต่ Linq เป็นส่วนย่อยของ Lambda หรืออะไร? เหตุใดจึงมีสองเทคโนโลยีที่ดูเหมือนกัน มีเหตุผลทางเทคนิคในการเลือกอย่างใดอย่างหนึ่งหรือไม่?
106 c#  linq  lambda 

13
การกำหนดภายในแลมบ์ดานิพจน์ใน Python
ฉันมีรายการของวัตถุและฉันต้องการลบวัตถุทั้งหมดที่ว่างเปล่ายกเว้นรายการเดียวโดยใช้filterและlambdaนิพจน์ ตัวอย่างเช่นหากอินพุตคือ: [Object(name=""), Object(name="fake_name"), Object(name="")] ... ผลลัพธ์ควรเป็น: [Object(name=""), Object(name="fake_name")] มีวิธีเพิ่มงานให้กับlambdaนิพจน์หรือไม่? ตัวอย่างเช่น: flag = True input = [Object(name=""), Object(name="fake_name"), Object(name="")] output = filter( (lambda o: [flag or bool(o.name), flag = flag and bool(o.name)][0]), input )

16
ควรใช้แบบใดมากกว่ากัน: ฟังก์ชันแลมบ์ดาหรือฟังก์ชันซ้อนกัน ('def')
ฉันใช้ฟังก์ชันแลมบ์ดาเป็นส่วนใหญ่ แต่บางครั้งก็ใช้ฟังก์ชันซ้อนกันที่ดูเหมือนจะให้พฤติกรรมเดียวกัน ต่อไปนี้เป็นตัวอย่างเล็กน้อยที่พวกเขาทำหน้าที่เหมือนกันหากพบในฟังก์ชันอื่น: ฟังก์ชัน Lambda >>> a = lambda x : 1 + x >>> a(5) 6 ฟังก์ชันซ้อนกัน >>> def b(x): return 1 + x >>> b(5) 6 มีข้อดีในการใช้อย่างอื่นหรือไม่? (ประสิทธิภาพการอ่านข้อ จำกัด ความสม่ำเสมอ ฯลฯ ) มันสำคัญหรือไม่? หากไม่เป็นเช่นนั้นจะเป็นการละเมิดหลักการของ Pythonic: ควรจะมีหนึ่งและโดยเฉพาะอย่างยิ่งเพียงหนึ่งที่เห็นได้ชัดวิธีที่จะทำมัน

2
C ++ 0x แลมบ์ดาจับตามค่าเสมอ const?
มีวิธีใดบ้างในการจับตามมูลค่าและทำให้ค่าที่จับได้ไม่ใช่ const? ฉันมี functor ของไลบรารีที่ฉันต้องการจับภาพและเรียกใช้เมธอดที่ไม่ใช่ const แต่ควรจะเป็น สิ่งต่อไปนี้ไม่ได้รวบรวม แต่การสร้าง foo :: operator () const จะแก้ไขได้ struct foo { bool operator () ( const bool & a ) { return a; } }; int _tmain(int argc, _TCHAR* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; …
103 c++  lambda  const  c++11 

5
กลับมาจาก lambda forEach () ใน java
ฉันกำลังพยายามเปลี่ยนบางส่วนสำหรับแต่ละลูปเป็นแลมบ์ดา - forEach()วิธีการเพื่อค้นหาความเป็นไปได้ของนิพจน์แลมบ์ดา สิ่งต่อไปนี้น่าจะเป็นไปได้: ArrayList<Player> playersOfTeam = new ArrayList<Player>(); for (Player player : players) { if (player.getTeam().equals(teamName)) { playersOfTeam.add(player); } } ด้วยแลมด้า forEach() players.forEach(player->{if (player.getTeam().equals(teamName)) {playersOfTeam.add(player);}}); แต่อันถัดไปใช้ไม่ได้: for (Player player : players) { if (player.getName().contains(name)) { return player; } } กับแลมด้า players.forEach(player->{if (player.getName().contains(name)) {return player;}}); มีบางอย่างผิดปกติในไวยากรณ์ของบรรทัดสุดท้ายหรือเป็นไปไม่ได้ที่จะกลับจากforEach()วิธีการ?

6
วิธีตั้งค่าเริ่มต้นของฟิลด์โมเดล Django เป็นการเรียกใช้ฟังก์ชัน / เรียกได้ (เช่นวันที่ที่สัมพันธ์กับเวลาของการสร้างโมเดลอ็อบเจ็กต์)
แก้ไข: ฉันจะตั้งค่าเริ่มต้นของฟิลด์ Django เป็นฟังก์ชันที่ได้รับการประเมินทุกครั้งที่สร้างโมเดลอ็อบเจ็กต์ใหม่ได้อย่างไร ฉันต้องการทำสิ่งต่อไปนี้ยกเว้นในรหัสนี้รหัสจะได้รับการประเมินครั้งเดียวและตั้งค่าเริ่มต้นเป็นวันที่เดียวกันสำหรับวัตถุแต่ละรุ่นที่สร้างขึ้นแทนที่จะประเมินรหัสทุกครั้งที่สร้างวัตถุแบบจำลอง: from datetime import datetime, timedelta class MyModel(models.Model): # default to 1 day from now my_date = models.DateTimeField(default=datetime.now() + timedelta(days=1)) เดิม: ฉันต้องการสร้างค่าเริ่มต้นสำหรับพารามิเตอร์ฟังก์ชันเพื่อให้เป็นแบบไดนามิกและได้รับการเรียกใช้และตั้งค่าทุกครั้งที่เรียกฟังก์ชัน ฉันจะทำเช่นนั้นได้อย่างไร? เช่น, from datetime import datetime def mydate(date=datetime.now()): print date mydate() mydate() # prints the same thing as the previous call; but I want …

5
std :: function ใช้งานอย่างไร?
ตามแหล่งที่มาที่ฉันพบนิพจน์แลมบ์ดาถูกนำไปใช้โดยคอมไพเลอร์ที่สร้างคลาสที่มีตัวดำเนินการเรียกใช้ฟังก์ชันมากเกินไปและตัวแปรที่อ้างอิงเป็นสมาชิก นี้แสดงให้เห็นว่าขนาดของการแสดงออกแลมบ์ดาแตกต่างกันไปและได้รับการอ้างอิงตัวแปรพอที่ขนาดอาจจะมีขนาดใหญ่โดยพลการ std::functionควรจะมีขนาดคงที่แต่ก็จะต้องสามารถที่จะตัดชนิดของ callables ใด ๆ รวมทั้ง lambdas ชนิดเดียวกันใด ๆ มีการใช้งานอย่างไร? หากstd::functionใช้ตัวชี้ไปยังเป้าหมายภายในจะเกิดอะไรขึ้นเมื่อstd::functionอินสแตนซ์ถูกคัดลอกหรือย้าย มีการจัดสรรฮีปที่เกี่ยวข้องหรือไม่?
102 c++  c++11  lambda 

5
ฟังก์ชัน JavaScript ที่ไม่ระบุชื่อ f => f ทำอะไรกันแน่?
ฉันใช้ไลบรารีของบุคคลที่สามที่มีฟังก์ชันที่รับฟังก์ชันเป็นอาร์กิวเมนต์ ฉันกำลังตรวจสอบเงื่อนไขบางอย่างเพื่อตัดสินใจว่าจะเพิ่มฟังก์ชันใดฟังก์ชันหนึ่งเป็นพารามิเตอร์หรือไม่และในบางกรณีฉันไม่ต้องการให้ฟังก์ชัน การระบุค่าว่างในกรณีนั้นจะทำให้เกิดข้อผิดพลาด ฉันพบรหัสนี้ซึ่งใช้งานได้ แต่ฉันไม่เข้าใจว่าเกิดอะไรขึ้น compose(__DEV__ ? devTools() : f => f) คือf => fเทียบเท่ากับ() => {}ฟังก์ชั่นที่ไม่ระบุชื่อที่ว่างเปล่า?

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